6

我有一个 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

4 回答 4

8

惯用的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
于 2015-09-22T20:45:07.500 回答
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
于 2013-08-28T08:07:00.747 回答
2

更简单的data.table解决方案是获取每个组的第一个元素

> 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
于 2015-09-22T20:42:46.493 回答
0

感谢 dplyR

library(dplyr)
col1 = c(1,1,3,3,5,6,7,8,9)
col2 = c("cust1", 'cust1', 'cust3', 'cust4', 'cust5', 'cust5', 'cust5',     'cust5', 'cust6')
df1 = data.frame(col1, col2)
df1

distinct(select(df1, col1, col2))
于 2015-09-22T20:02:39.947 回答