[英]r filter dataframe group_by, and find cumusm
我有以下方式的 df
id = c(1, 1, 2, 2, 3, 4, 4, 4)
val = c("AAA", "BBB", "BBB", "CCC", "AAA", "BBB", "AAA", "CCC")
df = data.frame(id= id, val=val)
我想至少刪除一次不包含給定字符串的組(此處為 "AAA" ),然后按組查找 "AAA" 出現的總和。 在示例中,組 id=4 中的第一個元素“BBB”被刪除,因為它出現在“AAA”之前。
輸出看起來像
id = c( 1, 1, 3, 4, 4)
val = c("AAA","BBB","AAA","AAA","CCC")
cs = c( 1, 1, 2, 3, 3)
df = data.frame(id= id, val=val, cs)
您可以使用dplyr
庫嘗試以下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
我們為每個id
選擇"AAA"
值之后的所有行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.