我认为为此必须有一个解决方案,但我一直在寻找与几乎我想要的解决方案有关的解决方案,但并非完全如此。 如果可能的话,寻找一个整洁的解决方案。
我有一个data.frame,例如newdf:
newdf <- data.frame(inside.city = c(TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE))
newdf
inside.city
1 TRUE
2 TRUE
3 TRUE
4 FALSE
5 FALSE
6 TRUE
7 FALSE
8 FALSE
每次有人“离开城市”(inside.city == FALSE)时,我都想给他们的旅程分配一个唯一的组号,以便生成的data.frame看起来像这样:
inside.city group
1 TRUE NA
2 TRUE NA
3 TRUE NA
4 FALSE 1
5 FALSE 1
6 TRUE NA
7 FALSE 2
8 FALSE 2
假设数据已按日期排序。
如何有效地做到这一点?
答案 0 :(得分:3)
这是使用mutate()
的一种方法。我只对列进行了两次转换以简化操作
library(dplyr)
newdf %>% mutate(group=cumsum(!inside.city & lag(inside.city, default=TRUE)),
group=ifelse(inside.city, NA, group))
基本上,您只需在看到TRUE之后看到FALSE时就递增,然后将TRUE值设置为NA。
答案 1 :(得分:0)
使用dplyr
和data.table
的不同解决方案:
df %>%
mutate(group = ifelse(inside.city == FALSE, rleid(inside.city), NA),
group = dense_rank(group))