应对 NA 或条件的 R 分组计数器
R grouped counter that copes with NAs or conditions
我有一个 R 数据框,我需要一个计数器,它为一组新的情况提供一个新的数字,同时继续这个数字(尊重数据的顺序)。
之前有很多关于此的帖子,但 none 似乎可以解决我的问题。我试过使用 row_counter
、ave
和 rleid
的组合,none 似乎恰到好处。
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
中包含的那样)。
非常感谢任何帮助!
因为我们有 marker_new
列作为 1/0,我们可以使用 cumsum
按组 (id
) 来获得计数器。
基数 R:
df$result <- with(df, ave(marker_new, id, FUN = cumsum))
dplyr:
df %>% group_by(id) %>% mutate(result = cumsum(marker_new))
data.table
setDT(df)[, result := cumsum(marker_new), by = id]
我有一个 R 数据框,我需要一个计数器,它为一组新的情况提供一个新的数字,同时继续这个数字(尊重数据的顺序)。
之前有很多关于此的帖子,但 none 似乎可以解决我的问题。我试过使用 row_counter
、ave
和 rleid
的组合,none 似乎恰到好处。
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
中包含的那样)。
非常感谢任何帮助!
因为我们有 marker_new
列作为 1/0,我们可以使用 cumsum
按组 (id
) 来获得计数器。
基数 R:
df$result <- with(df, ave(marker_new, id, FUN = cumsum))
dplyr:
df %>% group_by(id) %>% mutate(result = cumsum(marker_new))
data.table
setDT(df)[, result := cumsum(marker_new), by = id]