如何找到 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