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

问题描述 投票:-1回答:1

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

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
r dplyr
1个回答
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

部分cumsum(dg == "v") == 0意味着只有dg=="v"尚未针对该特定id出现才能成立。

© www.soinside.com 2019 - 2024. All rights reserved.