【问题标题】:How do I select a subset of rows after group by a specific column in R Data table [duplicate]如何在按 R 数据表中的特定列分组后选择行的子集 [重复]
【发布时间】:2016-03-17 22:47:15
【问题描述】:

我想在按 R 数据表中的特定列分组后根据条件选择行的子集。 以 Mtcars 数据为例。

dt_mtcars <- as.data.table(mtcars)


dt_mtcars[,.N,by=.(hp)]

    hp  N
 1: 110 3
 2:  93 1
 3: 175 3
 4: 105 1
 5: 245 2
 6:  62 1
 7:  95 1
 8: 123 2
 9: 180 3
10: 205 1
11: 215 1
12: 230 1
13:  66 2
14:  52 1
15:  65 1
16:  97 1
17: 150 2
18:  91 1
19: 113 1
20: 264 1
21: 335 1
22: 109 1
     hp N

现在我想要实现的就像根据计数选择一个数据子集,例如在这里我希望将所有数据放在 dt_mtcars 中,其中 N >1 如果我尝试这样的事情(这在概念上是我想要实现的),它会显示所有行而不是获取 N 大于 1 的行。

dt_mtcars[.N>1,.SD,by=.(hp)]

请帮忙。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以分两步完成:

    dt_mtcars[,Count:=.N, by=.(hp)][Count>1, .SD, .SDcols = rev(rev(1:length(names(dt_mtcars)))[-1])]
    

    编辑:实现的 mtcars 不只有这两行,更新了 SDcols

    编辑:已修复以删除计数

    【讨论】:

    • 我不想创建额外的列 :(
    • 然后只过滤掉你想要的列,编辑上面的
    • 无论如何我首先创建一个列,这里我以 mtcars 为例,在实际数据中,我有数百万行我想避免创建列,除非那是我唯一的选择
    • 您是否关心是否从原始数据集中删除数据?
    • 即使有数百万行,通过引用创建新列也非常快
    【解决方案2】:

    我们可以使用if 来做到这一点

    dt_mtcars[, if(.N>1) .SD ,hp]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-18
      • 2021-04-16
      • 2015-03-21
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多