如何根据R中的过滤器计算记录数

hba*_*bar -1 r dplyr

我需要根据我需要在组上应用的过滤操作来计算组中的记录数

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
Run Code Online (Sandbox Code Playgroud)

我需要计算(或标记)"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
Run Code Online (Sandbox Code Playgroud)

tal*_*lat 6

我的方法如下:

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
Run Code Online (Sandbox Code Playgroud)

该部分cumsum(dg == "v") == 0意味着只有dg=="v"尚未针对该特定ID出现才能成为真实.