我有一个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
答案 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];