R data.table过滤组大小

时间:2015-12-23 01:55:06

标签: r data.table

我正在尝试查找我的data.table中的所有记录,其中 v 字段中有多个值为 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>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)],并没有做到这一点,因为它保留了一个重复的&#39;结果。

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

那我怎么能这样做呢?

编辑添加示例

2 个答案:

答案 0 :(得分:7)

问题不明确。根据标题,我们希望提取行数(.N)大于1的所有组。

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

value v in field f令人困惑。

答案 1 :(得分: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