要找到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