如何在 data.table 对象中查找分组后的公共值?


要查找 data.table 对象的分组后的公共值,我们可以使用 Reduce 函数与 intersect 函数结合。

例如,如果我们有一个名为 DT 的 data.table 对象,其中包含一个数值列 Num 和一个分类列 C,其中 C 位于第一位,则可以通过使用以下命令找到分组后的公共值:

Reduce(intersect,DT[,.(list(unique(Num))),C]$V1)

示例

考虑以下 data.table 对象:

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

输出

创建了以下数据框:

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

为了查找 Group 列中所有组的 Rate 的分组后的公共值,请将以下代码添加到上述代码段中:

示例

Reduce(intersect,DT1[,.(list(unique(Rate))),Group]$V1)

输出

如果您将以上所有代码段作为一个程序执行,它将生成以下输出:

[1] 1 0

示例

考虑以下 data.table 对象:

Category<-sample(c("I","II","III"),20,replace=TRUE)
Rank<-sample(1:3,20,replace=TRUE)
DT2<-data.table(Category,Rank)
DT2

输出

创建了以下数据框:

  Category Rank
1:    I    1
2:  III    2
3:  III    3
4:    I    2
5:    I    3
6:  III    3
7:  III    2
8:  III    2
9:  III    2
10:  II    3
11: III    2
12:  II    1
13: III    1
14:  II    3
15:   I    1
16: III    2
17: III    1
18:  II    1
19:   I    1
20: III    3

要查找 Category 列中所有组的 Rank 的分组后的公共值,请将以下代码添加到上述代码段中:

示例

Reduce(intersect,DT2[,.(list(unique(Rank))),Category]$V1)

输出

如果您将以上所有代码段作为一个程序执行,它将生成以下输出:

[1] 1 3

示例

考虑以下 data.table 对象:

Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Score<-sample(0:2,20,replace=TRUE)
DT3<-data.table(Class,Score)
DT3

输出

创建了以下数据框:

    Class  Score
1:  First   2
2:  Second  0
3:  First   1
4:  Third   2
5:  Second  1
6:  Third   1
7:  Third   0
8:  Third   1
9:  Third   2
10: Third   1
11: Second  0
12: Third   0
13: First   2
14: First   1
15: First   1
16: First   0
17: Second  2
18: Second  2
19: First   0
20: Second  1

要查找 Class 列中所有组的 Score 的分组后的公共值,请将以下代码添加到上述代码段中:

示例

Reduce(intersect,DT3[,.(list(unique(Score))),Class]$V1)

输出

如果您将以上所有代码段作为一个程序执行,它将生成以下输出:

[1] 2 1 0

更新于:2021年11月2日

101 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告