从data.table中的组中仅选择一行

时间:2018-04-02 02:41:11

标签: r duplicates data.table

我有一个数据表,其中包含多个具有相同组的行,如下所示。

a=data.table(q=c(1,1,1,2,2,2,3,3,3),r=c(1,1,1,1,1,1,1,1,1),s=c(1,3,1,3,1,3,1,3,1),t=c(1,2,3,1,2,3,1,2,3))

由此我只想要q,r,s组中的一个唯一行。 我试过了

unique(a)
   q r s t
1: 1 1 1 1
2: 1 1 3 2
3: 1 1 1 3
4: 2 1 3 1
5: 2 1 1 2
6: 2 1 3 3
7: 3 1 1 1
8: 3 1 3 2
9: 3 1 1 3

返回组中所有但不是唯一的唯一行。

 a[!duplicated(a$q,a$r,a$s)]
   q r s t
1: 1 1 1 1
2: 1 1 3 2
3: 1 1 1 3
4: 2 1 3 3
5: 3 1 1 3

当我尝试这个时,我放松了行

   3 1 3 2

我想要的输出类似于

   q r s t
1: 1 1 1 1
2: 1 1 3 2
3: 2 1 3 1
4: 2 1 1 2
5: 3 1 1 1
6: 3 1 3 2

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

从文档:向量或数据框或数组或NULL (不是多个数组)

a[!(duplicated(a[,c('q','r','s')]))]
   q r s t
1: 1 1 1 1
2: 1 1 3 2
3: 2 1 3 1
4: 2 1 1 2
5: 3 1 1 1
6: 3 1 3 2

答案 1 :(得分:0)

使用dplyr,您可以执行此操作:

require(dplyr)

distinct(a, q, r, s, .keep_all = TRUE)

#    q r s t
# 1: 1 1 1 1
# 2: 1 1 3 2
# 3: 2 1 3 1
# 4: 2 1 1 2
# 5: 3 1 1 1
# 6: 3 1 3 2