簡體   English   中英

r 過濾數據框 group_by,並找到 cumusm

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM