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