我想选择每个 的第一个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)
cumsum在group_by+中使用filter你可以这样做:
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\nRun Code Online (Sandbox Code Playgroud)\n感谢 @r2evans 的评论,这可以通过使用来简化cumany:
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\nRun Code Online (Sandbox Code Playgroud)\n