按组获取唯一值的行

时间:2013-08-28 07:38:15

标签: r data.table

我有一个data.table并且想要选择data.table的那些行,其中变量x的某些值相对于另一个变量y是唯一的

可以获取x的唯一值,在单独的数据集中按y分组,如下所示

dt[,unique(x),by=y]

但我想选择原始数据集中的行,在这种情况下。我不想要新的data.table,因为我还需要其他变量。

那么,我需要添加什么来获取dt中上述为真的行?

dt <- data.table(y=rep(letters[1:2],each=3),x=c(1,2,2,3,2,1),z=1:6) 

   y x z
1: a 1 1
2: a 2 2
3: a 2 3
4: b 3 4
5: b 2 5
6: b 1 6

我想要的是什么:

   y x z
1: a 1 1
2: a 2 2
3: b 3 4
4: b 2 5
5: b 1 6

4 个答案:

答案 0 :(得分:6)

data.table在如何使用duplicated方面略有不同。以下是我之前在这里看过的方法:

dt <- data.table(y=rep(letters[1:2],each=3),x=c(1,2,2,3,2,1),z=1:6) 
setkey(dt, "y", "x")
key(dt)
# [1] "y" "x"
!duplicated(dt)
# [1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
dt[!duplicated(dt)]
#    y x z
# 1: a 1 1
# 2: a 2 2
# 3: b 1 6
# 4: b 2 5
# 5: b 3 4

答案 1 :(得分:5)

惯用data.table方式是:

require(data.table)
unique(dt, by = c("y", "x"))
#    y x z
# 1: a 1 1
# 2: a 2 2
# 3: b 3 4
# 4: b 2 5
# 5: b 1 6

答案 2 :(得分:2)

更简单的> dt[, head(.SD, 1), by=.(y, x)] y x z 1: a 1 1 2: a 2 2 3: b 3 4 4: b 2 5 5: b 1 6 解决方案是抓住每个组的第一个元素

{{1}}

答案 3 :(得分:0)

感谢dplyR

NSInteger someNumber = [apiDictionary[@"SomeKey"] integerValue];