【问题标题】:R data.table filtering on group sizeR data.table 过滤组大小
【发布时间】:2015-12-23 01:55:06
【问题描述】:

我正在尝试查找我的data.table 中的所有记录,这些记录在字段 f 中有不止一行的值为 v

例如,我们可以使用以下数据:

dt <- data.table(f1=c(1,2,3,4,5), f2=c(1,1,2,3,3))

如果在字段 f2 中查找该属性,我们会得到(注意缺少 (3,2) 元组)

    f1 f2
1:  1  1
2:  2  1
3:  4  3
4:  5  3  

我的第一个猜测是dt[.N&gt;2,list(.N),by=f2],但实际上保留了.N==1 的条目。

dt[.N>2,list(.N),by=f2]
   f2 N
1:  1 2
2:  2 1
3:  3 2

另一个简单的猜测,dt[duplicated(dt$f2)],并不能解决问题,因为它会将一个“重复”排除在结果之外。

dt[duplicated(dt$f2)]
   f1 f2
1:  2  1
2:  5  3

那么我该怎么做呢?

编辑添加示例

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    问题不清楚。根据标题,我们似乎想要提取所有行数 (.N) 大于 1 的组。

    DT[, if(.N>1) .SD, by=f]
    

    但是value v in field f 让人困惑。

    【讨论】:

      【解决方案2】:

      如果我正确理解您的要求,您需要做一些复合查询:

      library(data.table)
      DT <- data.table(v1 = 1:10, f = c(rep(1:3, 3), 4))
      DT[, N := .N, f][N > 2][, N := NULL][]
      #    v1 f
      # 1:  1 1
      # 2:  2 2
      # 3:  3 3
      # 4:  4 1
      # 5:  5 2
      # 6:  6 3
      # 7:  7 1
      # 8:  8 2
      # 9:  9 3
      

      【讨论】:

        猜你喜欢
        • 2022-12-08
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 2021-07-23
        • 2023-04-05
        • 2021-11-25
        • 1970-01-01
        相关资源
        最近更新 更多