【发布时间】:2019-09-06 10:56:52
【问题描述】:
我有一个 R 数据框,我需要一个计数器,它可以为一组新的情况提供一个新的数字,同时继续这个数字(尊重数据的顺序)。
以前有很多关于此的帖子,但似乎没有一个可以解决我的问题。我尝试过使用row_counter、ave 和rleid 的组合,但似乎没有一个能成功。
id <- c("A","A","A","A","A","B","B","B","B","B","B","B","B","B","B","C","C","C","C","D","D")
marker_new <- c(1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0)
counter_result <- c(1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,1,1,2,2,1,1)
df <- data.frame(id,marker_new, counter_result)
df <- df %>%
group_by(id, marker_new) %>%
mutate(counter =
ifelse(marker_new != 0,
row_number(),
lag(marker_new,lag(marker_new))) %>%
ungroup()
我可以使用上面的代码来达到目的,这会给我一个新的数字,但不会继续这组数字(就像我已经包含的 counter_result 一样)。
非常感谢任何帮助!
【问题讨论】:
-
cumsumbyid似乎给了counter_result,df %>% group_by(id) %>% mutate(counter_new = cumsum(marker_new)) -
@RonakShah 解决了!或者至少它让我意识到我的数据中有一个新问题......但回答了我的问题!不知道如何将评论标记为解决方案