在R data.table中按多列保留第一行

在R data.table中按多列保留第一行,r,duplicates,data.table,R,Duplicates,Data.table,我只想从data.table中获取第一行,该表由多个列分组 这对于单列来说很简单,例如: (dt <- data.table(x = c(1, 1, 1, 2), y = c(1, 1, 2, 2), z = c(1, 2, 1, 2))) # x y z # |1: 1 1 1 # |2: 1 1 2 # |3: 1 2 1 # |4: 2 2 2 dt[!duplicated(x)] # Remove ro

我只想从data.table中获取第一行,该表由多个列分组

这对于单列来说很简单,例如:

(dt <- data.table(x = c(1, 1, 1, 2),
                  y = c(1, 1, 2, 2),
                  z = c(1, 2, 1, 2)))
#     x y z
# |1: 1 1 1
# |2: 1 1 2
# |3: 1 2 1
# |4: 2 2 2
dt[!duplicated(x)] # Remove rows 2-3
#     x y z
# |1: 1 1 1
# |2: 2 2 2
除此之外,仅在某些情况下有效:

dt[!duplicated(paste0(x, y))]
#     x y z
# |1: 1 1 1
# |2: 1 2 1
# |3: 2 2 2

数据。表
唯一
重复
任何重复
提供了S3方法

unique(dt, by = c('x','y'))

将提供您想要的。

数据。表
按键复制。从
?复制的.data.表格

 ‘duplicated’ returns a logical vector indicating which rows of a
 ‘data.table’ have duplicate rows (by key).


默认情况下,您可以通过variables@mnel是的,我对你的答案投了赞成票。我只是想这也许能解释为什么这种行为是有意义的,尽管它看起来很奇怪。dt[!duplicated(dt[,c(“x”,“y”),with=F])#似乎有效
 ‘duplicated’ returns a logical vector indicating which rows of a
 ‘data.table’ have duplicate rows (by key).
setkey(dt, x, y)
dt[!duplicated(dt)]
##    x y z
## 1: 1 1 1
## 2: 1 2 1
## 3: 2 2 2