如何找到 data.table 对象的分组公共值?

要找到data.table对象的分组公共值,我们可以使用 Reduce 函数和 intersect 函数。

例如,如果我们有一个data.table名为 DT的对象,其中包含一个数字列 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

猜你喜欢