问题描述
我通过以下方式拥有df
id = c(1,1,2,3,4,4)
val = c("AAA","BBB","CCC","AAA","CCC")
df = data.frame(id= id,val=val)
我要删除至少一个不包含给定字符串的任何组(在此为“ AAA”), 然后按组查找“ AAA”的出现总数。 在该示例中,组id = 4中的第一个元素“ BBB”被删除,因为它出现在“ AAA”之前。
输出看起来像
id = c( 1,"CCC")
cs = c( 1,3)
df = data.frame(id= id,val=val,cs)
解决方法
您可以使用dplyr
库尝试以下操作:
library(dplyr)
df %>%
group_by(id) %>%
filter(if(any(val == 'AAA')) row_number() >= match('AAA',val) else FALSE) %>%
mutate(cs = cur_group_id())
#For dplyr < 1.0.0
#ungroup %>% mutate(cs = match(id,unique(id)))
# id val cs
# <dbl> <chr> <int>
#1 1 AAA 1
#2 1 BBB 1
#3 3 AAA 2
#4 4 AAA 3
#5 4 CCC 3
我们为每个"AAA"
选择id
值之后的所有行。