我正在尝试查找我的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
那我怎么能这样做呢?
编辑添加示例
答案 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