如何按R中data.table对象的分类列提取唯一行?

如果我们在data.table对象中有分类数据并且某些值是重复的,那么我们可能希望从该对象中提取唯一的行。

要按data.table对象的分类列提取唯一行,我们可以使用 unique 函数并使用 by 参数定义列,如下例所示。要了解提取是如何完成的,请查看以下示例。

示例 1

以下代码段创建了一个data.table对象 -

library(data.table)
grp<-sample(LETTERS[1:4],20,replace=TRUE)
Score<-rpois(20,5)
DT1<-data.table(grp,Score)
DT1

data.table创建以下对象 -

   grp Score
1:  D  3
2:  B  3
3:  B  4
4:  B  3
5:  D  5
6:  B  7
7:  B  4
8:  D  1
9:  A  4
10: A  3
11: B  2
12: A  5
13: B  4
14: A  5
15: D  4
16: D  3
17: D  4
18: D  7
19: B  3
20: B  2

要提取 DT1 中的唯一行,请将以下代码添加到上述代码段中 -

unique(DT1,by=c("grp","Score"))
输出结果

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

  grp Score
1:  D  3
2:  B  3
3:  B  4
4:  D  5
5:  B  7
6:  D  1
7:  A  4
8:  A  3
9:  B  2
10: A  5
11: D  4
12: D  7

示例 2

以下代码段创建了一个data.table对象 -

Category<-sample(c("Low","Medium","High"),20,replace=TRUE)
Price<-sample(1:10,20,replace=TRUE)
DT2<-data.table(Category,Price)
DT2

data.table创建以下对象 -

   Category Price
1:  High     7
2:  Medium   5
3:  Low      1
4:  Medium   5
5:  Medium   5
6:  Medium   8
7:  Low      2
8:  Medium   4
9:  Medium   7
10: Medium   3
11: Medium   4 
12: Medium  10
13: High     7
14: Medium   3
15: Low      8
16: Low      2
17: Low      6
18: Medium   2
19: High     6
20: High     4

要在 DT2 中提取唯一行,请将以下代码添加到上述代码段中 -

unique(DT2,by=c("Category","Price"))
输出结果

如果您将上述所有给定的片段作为单个程序执行,它会生成以下输出 -

 Category Price
1:  High    7
2:  Medium  5
3:  Low     1
4:  Medium  8
5:  Low     2
6:  Medium  4
7:  Medium  7
8:  Medium  3
9:  Medium 10
10: Low     8
11: Low     6
12: Medium  2
13: High    6
14: High    4

猜你喜欢