dplyr错误:在mutate()中使用rle()找不到对象

Tom*_*ell 1 r dplyr

我正在尝试使用dplyrvalue每列的运行长度插入到我的数据中group.

tdf <- tbl_df(structure(list(group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", 
"B"), class = "factor"), value = c(TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, TRUE, TRUE, FALSE, FALSE, FALSE)), class = c("tbl_df", 
"tbl", "data.frame"), .Names = c("group", "value"), row.names = c(NA, 
-20L)))
Run Code Online (Sandbox Code Playgroud)

我的数据看起来像这样......

 > tdf
Source: local data frame [20 x 2]

       group value
    1      A  TRUE
    2      A  TRUE
    3      A  TRUE
    4      A  TRUE
    5      A  TRUE
    6      A  TRUE
    7      A FALSE
    8      A FALSE
    9      A  TRUE
    10     A FALSE
    11     B FALSE
    12     B FALSE
    13     B FALSE
    14     B FALSE
    15     B FALSE
    16     B  TRUE
    17     B  TRUE
    18     B FALSE
    19     B FALSE
    20     B FALSE
Run Code Online (Sandbox Code Playgroud)

我想要的输出看起来像这样......(注意组之间的运行长度重新开始)

   group value run_length
1      A  TRUE          6
2      A  TRUE          6
3      A  TRUE          6
4      A  TRUE          6
5      A  TRUE          6
6      A  TRUE          6
7      A FALSE          2
8      A FALSE          2
9      A  TRUE          1
10     A FALSE          1
11     B FALSE          5
12     B FALSE          5
13     B FALSE          5
14     B FALSE          5
15     B FALSE          5
16     B  TRUE          2
17     B  TRUE          2
18     B FALSE          3
19     B FALSE          3
20     B FALSE          3
Run Code Online (Sandbox Code Playgroud)

我认为这只是在dplyr中这样做的问题......

group_by(tdf, group) %.% 
  mutate(run_len = rep(rle(value)$lengths,rle(value)$lengths))
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

Error in rle(value) : object 'value' not found
Run Code Online (Sandbox Code Playgroud)

我在dplyr之外使用split和lapply有一个解决方案,但是想知道这在dplyr中是如何工作的.

npj*_*pjc 5

解:

  • tbl_dt() 似乎是你需要的.

从你的tdf工作如预期的那样:

tbl_dt(tdf) %>% 
group_by(group) %>%
mutate( run_len = rep( rle(value)$lengths,rle(value)$lengths ) )
Run Code Online (Sandbox Code Playgroud)

错误?

相当于tbl_df()不行......我不知道为什么......

tbl_df(tdf) %>% 
group_by(group) %>%
mutate( run_len = rep( rle(value)$lengths,rle(value)$lengths ) ) 
Run Code Online (Sandbox Code Playgroud)

给出熟悉的错误: Error in rle(value) : object 'value' not found