我需要根据我需要在组上应用的过滤操作来计算组中的记录数
DF
id dg cs
1 s 1
1 v 0
2 s 0
2 v 1
2 s 1
2 s 0
3 s 1
3 s 1
3 v 1
我需要计算(或标记)“dg”中“v”之前“dg-cs”字段中出现's-1'组合的记录数。
因此,输出将是
id dg cs output
1 s 1 True
1 v 0 False
2 s 0 False
2 v 1 False
2 s 1 False
2 s 0 False
3 s 1 True
3 s 1 True
3 v 1 False
我的方法如下:
library(dplyr)
df %>%
group_by(id) %>%
mutate(out = dg == "s" & cs == 1 & cumsum(dg == "v") == 0)
## A tibble: 9 x 4
## Groups: id [3]
# id dg cs out
# <int> <chr> <int> <lgl>
#1 1 s 1 TRUE
#2 1 v 0 FALSE
#3 2 s 0 FALSE
#4 2 v 1 FALSE
#5 2 s 1 FALSE
#6 2 s 0 FALSE
#7 3 s 1 TRUE
#8 3 s 1 TRUE
#9 3 v 1 FALSE
部分cumsum(dg == "v") == 0
意味着只有dg=="v"
尚未针对该特定id出现才能成立。