【问题标题】:Keep only groups of data with multiple observations仅保留具有多个观察值的数据组
【发布时间】:2015-06-10 00:53:00
【问题描述】:

我试图只保留具有多个观察结果的神。

我有以下代码

help <- data.frame(deid = c(1, 5, 5, 5, 5, 5, 5, 12, 12, 12, 12),
                   session.number = c(1, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4),
                   days.since.last = c(0, 0, 7, 14, 93, 5, 102, 0, 21, 104, 4))

   deid session.number days.since.last
1     1              1               0
2     5              1               0
3     5              2               7
4     5              3              14
5     5              4              93
6     5              5               5
7     5              6             102
8    12              1               0
9    12              2              21
10   12              3             104
11   12              4               4

我微弱的尝试是先使用 group_by,然后使用 filter( ) 命令

help %>% group_by(deid) %>% filter(session.number >=2)

但是,它只会将 session.number 保持在 2 或更大。所以我去掉了 deid = 1,但所有剩余的 deid 数据都从 session.number 2 开始,而不是 session.number 1。

我想告诉 R 是保持组 (deid) 的观察次数大于 1 (session.number)

非常感谢任何帮助。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    应该这样做 - 您需要按使用 n() 获得的每个组中的观察数进行过滤:

    help %>% group_by(deid) %>% filter(n()>1)
    
      deid session.number days.since.last
    1     5              1               0
    2     5              2               7
    3     5              3              14
    4     5              4              93
    5     5              5               5
    6     5              6             102
    7    12              1               0
    8    12              2              21
    9    12              3             104
    10   12              4               4
    

    【讨论】:

    • 我是否可以在您的答案中添加一个论点,该论点将仅提取具有至少 2 行观察数据的观察结果?例如当我在上面运行您的代码时,我得到了具有 2 个观察值的组,但是,有时其中一个在 NA。我只想保留那些至少有 2 次观察而不是 1 次观察 1 NA。
    • @bpace 哪一列有 NA ?在运行上述代码之前,您需要将其过滤掉
    • 好的,这有帮助。我的数据集中的另一个变量遇到了问题,但我应该能够从这里对其进行故障排除。谢谢。
    【解决方案2】:

    使用 data.table 代替:

    helpcount <- help[, list(Count = .N), by = deid]
    helpf <- merge(help,helpcount, by = "deid")
    helpf <- helpf[Count > 1]
    

    编辑:更简洁一点:

    help[, Count := .N, by = deid]
    help[Count > 1]
    

    EDIT2:thelatemail 更简洁的解决方案:

    help[,if(.N > 1) .SD, by=deid]
    

    【讨论】:

    • help[,if(.N &gt; 1) .SD, by=deid]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多