按 ID 对数据进行分组后,我想获取访问列中 F2 之后至少包含 2 个值的数据。
让我在下面的例子中展示它。 “dt”是我的输入,“ot”是我的输出。我创建“ot”,因为 ID 102 在 F2 之后只有 F3,也就是说该 ID 在 F2 之后没有至少 2 次访问。如果它访问了F3、F4,我也会选择ID 102。
感谢您的帮助。
dt<-data.frame(ID=c(100,100,100,100,100,100,100,
101,101,101,101,101,101,
102,102,102,102),
Visit=c("Bsl", "F1", "F2", "F3", "F4", "F5", "F6",
"Bsl", "F1", "F2", "F3", "F4", "F5",
"Bsl", "F1", "F2", "F3"),
X1=c(21,22,28,26,33,34,37,
44,43,48,50,52,57,
69,67,66, 70))
ot<-data.frame(ID=c(100,100,100,100,100,100,100,
101,101,101,101,101,101),
Visit=c("Bsl", "F1", "F2", "F3", "F4", "F5", "F6",
"Bsl", "F1", "F2", "F3", "F4", "F5"),
X1=c(21,22,28,26,33,34,37,
44,43,48,50,52,57))
最佳答案
像这样继续
Visit == 'F2
在该行中返回 True。cumsum
将在该行之后的所有行中返回至少1
或更大的数字(如果该组中有多个 F2)。- Sum 将返回该组的行数的最终总和(标量),包括该特定行及其之后的行数。
- 现在我们只需检查总和大于 2 的组(即第一个
F1
之后至少有 2 行)
library(dplyr)
dt %>% group_by(ID) %>%
filter(sum(cumsum(Visit == 'F2')) > 2)
#> # A tibble: 13 x 3
#> # Groups: ID [2]
#> ID Visit X1
#> <dbl> <chr> <dbl>
#> 1 100 Bsl 21
#> 2 100 F1 22
#> 3 100 F2 28
#> 4 100 F3 26
#> 5 100 F4 33
#> 6 100 F5 34
#> 7 100 F6 37
#> 8 101 Bsl 44
#> 9 101 F1 43
#> 10 101 F2 48
#> 11 101 F3 50
#> 12 101 F4 52
#> 13 101 F5 57
由 reprex package 于 2021 年 5 月 31 日创建(v2.0.0)
关于r - 如何在R中选择分组数据的特定部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67768999/