我正在尝试使用dplyr
将value
每个列的游程长度插入我的数据中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)))
我的数据看起来像这样...
> 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
我想要的输出如下所示(注意,运行长度在组之间重新开始)
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
我认为这只是在dplyr中执行此操作的问题...
group_by(tdf, group) %.%
mutate(run_len = rep(rle(value)$lengths,rle(value)$lengths))
但是我得到了错误:
Error in rle(value) : object 'value' not found
我在dplyr之外有一个使用split和lapply的解决方案,但想知道这在dplyr中如何工作。
tbl_dt()
似乎正是您所需要的。 从您的tdf
作品按预期工作:
tbl_dt(tdf) %>%
group_by(group) %>%
mutate( run_len = rep( rle(value)$lengths,rle(value)$lengths ) )
等效项tbl_df()
不起作用...我不知道为什么...
tbl_df(tdf) %>%
group_by(group) %>%
mutate( run_len = rep( rle(value)$lengths,rle(value)$lengths ) )
给出熟悉的错误: Error in rle(value) : object 'value' not found
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句