代码之家  ›  专栏  ›  技术社区  ›  stackinator Brenton Wiernik

无法将base-R`rep()`与dplyr一起使用

  •  2
  • stackinator Brenton Wiernik  · 技术社区  · 7 年前
    library(tidyverse)
    x <- c(0, 20, 30, 58)
    n <- 100
    df <- data_frame(x, n) %>% 
      distinct() %>%
      filter(x >= 0 & x < n) %>%
      arrange(x) %>%
      bind_rows(data_frame(x = n)) %>%
      mutate(lag_x = lag(x)) %>%
      mutate(y = x - lag_x) %>%
      filter(!is.na(y))
    
    rep(seq_along(df$x), df$y)
    

    rep() 打电话?对吗?

    library(tidyverse)
    x <- c(0, 20, 30, 58)
    n <- 100
    df <- data_frame(x, n) %>% 
      distinct() %>%
      filter(x >= 0 & x < n) %>%
      arrange(x) %>%
      bind_rows(data_frame(x = n)) %>%
      mutate(lag_x = lag(x)) %>%
      mutate(y = x - lag_x) %>%
      filter(!is.na(y)) %>% 
      rep(seq_along(x), y) %>% 
      print()
    

    函数\u list[i]出错:找不到对象“y”

    1 回复  |  直到 7 年前
        1
  •  5
  •   akrun    7 年前

    因为它在外面 mutate/summarise pull 或者提取它

    data_frame(x, n) %>% 
      distinct() %>%
      filter(x >= 0 & x < n) %>%
      arrange(x) %>%
      bind_rows(data_frame(x = n)) %>%
      mutate(lag_x = lag(x)) %>%
      mutate(y = x - lag_x) %>%
      filter(!is.na(y)) %>% 
      {rep(seq_along(.$x), .$y)}
    

    或者也可以写成

    data_frame(x, n) %>% 
     distinct() %>%
     filter(x >= 0 & x < n) %>%
     arrange(x) %>%
     bind_rows(data_frame(x = n)) %>%
     mutate(lag_x = lag(x)) %>%
     mutate(y = x - lag_x) %>%
     filter(!is.na(y)) %>% 
     summarise(n = list(rep(row_number(), y))) %>%
     pull(n)
    
    推荐文章