选择R中每组中特定行之后的所有行

Cin*_*ina 1 r dplyr

我想选择每个 的第一个V(列中)之后出现的行。actionuser

df<-read.table(text="
user   action
1        D
1        D
1        P
1        E
1        V
1        D
1        D
2        E
2        V
2        V
2        P",header=T,stringsAsFactors = F)

resutl:
user   action
1       V
1       D
1       D
2       V
2       V
2       P
Run Code Online (Sandbox Code Playgroud)

ste*_*fan 5

cumsumgroup_by+中使用filter你可以这样做:

\n
library(dplyr)\n\ndf |> \n  group_by(user) |> \n  filter(cumsum(action == "V") >= 1) |> \n  ungroup()\n#> # A tibble: 6 \xc3\x97 2\n#>    user action\n#>   <int> <chr> \n#> 1     1 V     \n#> 2     1 D     \n#> 3     1 D     \n#> 4     2 V     \n#> 5     2 V     \n#> 6     2 P\n
Run Code Online (Sandbox Code Playgroud)\n

感谢 @r2evans 的评论,这可以通过使用来简化cumany

\n
df |> \n  group_by(user) |> \n  filter(cumany(action == "V")) |> \n  ungroup()\n#> # A tibble: 6 \xc3\x97 2\n#>    user action\n#>   <int> <chr> \n#> 1     1 V     \n#> 2     1 D     \n#> 3     1 D     \n#> 4     2 V     \n#> 5     2 V     \n#> 6     2 P\n
Run Code Online (Sandbox Code Playgroud)\n

  • 代码高尔夫:管道中的“filter(cumany(action == "V"))” (4认同)