如何在R中重置为0时执行累加和?
我有一个表,我想获得一个组内的累计和(按ID),但如果组内任何一点的计数器为0,则累计计数应重置,并再次从1开始累计计数如何在R中重置为0时执行累加和?,r,cumsum,R,Cumsum,我有一个表,我想获得一个组内的累计和(按ID),但如果组内任何一点的计数器为0,则累计计数应重置,并再次从1开始累计计数 ID Counter Cumulative A 1 1 A 0 0 A 1 1 A 1 2 B 1 1 B 0 0
ID Counter Cumulative
A 1 1
A 0 0
A 1 1
A 1 2
B 1 1
B 0 0
B 1 1
创建临时组列以在每次遇到0时创建新组
library(dplyr)
df %>%
group_by(ID, grp = cumsum(Counter == 0)) %>%
mutate(Cumulative = cumsum(Counter)) %>%
ungroup() %>%
select(-grp) -> result
result
# ID Counter Cumulative
# <chr> <int> <int>
#1 A 1 1
#2 A 0 0
#3 A 1 1
#4 A 1 2
#5 B 1 1
#6 B 0 0
#7 B 1 1
数据
df <- structure(list(ID = c("A", "A", "A", "A", "B", "B", "B"), Counter = c(1L,
0L, 1L, 1L, 1L, 0L, 1L)), class = "data.frame", row.names = c(NA, -7L))
df另一种方法是
df %>% group_by(ID) %>%
mutate(cs = accumulate(Counter, ~ifelse(.y == 0, .y, .x + .y)))
查看dear@Ronak在其评论中提供的数据
df <- structure(list(ID = c("A", "A", "A", "A", "A", "B", "B", "B"), Counter = c(1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L)), class = "data.frame", row.names = c(NA, -8L))
df %>% group_by(ID) %>%
mutate(cs = accumulate(Counter, ~ifelse(.y == 0, .y, .x + .y)))
# A tibble: 8 x 3
# Groups: ID [2]
ID Counter cs
<chr> <int> <int>
1 A 1 1
2 A 0 0
3 A 1 1
4 A 1 2
5 A 1 3
6 B 1 1
7 B 0 0
8 B 1 1
df%group\u by(ID)%%>%
突变(cs=累积(计数器,~ifelse(.y==0.y.x+.y)))
#一个tibble:8x3
#组别:ID[2]
身份证计数器
一一一一
2 A 0 0
3 A 11
4 A 1 2
5 A 1 3
6b11
7B00
8 B 1 1
感谢您指出错误。我正在删除我的答案。这一次投了很多票!对我有用。请修改一下。
df <- structure(list(ID = c("A", "A", "A", "A", "A", "B", "B", "B"), Counter = c(1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L)), class = "data.frame", row.names = c(NA, -8L))
df %>% group_by(ID) %>%
mutate(cs = accumulate(Counter, ~ifelse(.y == 0, .y, .x + .y)))
# A tibble: 8 x 3
# Groups: ID [2]
ID Counter cs
<chr> <int> <int>
1 A 1 1
2 A 0 0
3 A 1 1
4 A 1 2
5 A 1 3
6 B 1 1
7 B 0 0
8 B 1 1