r - 如何在R中选择分组数据的特定部分?

标签 r dplyr

按 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/

相关文章:

r - 基于不同变量的交互式加入r

r - 分组ggplot中的备用刻度标签以避免R中的重叠

r - 在 R 中的字符串中不存在的数据框中创建列

r - 库(dplyr): there is no package called ‘dplyr’ 中的错误

r - 如何使用 R 检测系列数据中的差距

r - 将数据框列转换为命名数字向量

r - 带有 if/else 函数的 mutate()

r - `dplyr::percent_rank` 中的错字?

r - 使用 %>% 过滤数据框时维护行名

r - 试图了解 latex、sweave 和 R 之间的工作流程