如何在 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

更新于: 2021年11月11日

321 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始
广告