我在R中的多个大数据表中有一些数据。我希望合并并生成各种变量的计数。
我可以使用'table'命令轻松地在各个表格中生成计数,但我还没有想出经济(最好是基础R,一个班轮)命令然后产生组合计数。
aaa<-table(MyData1$MyVar)
bbb<-table(MyData2$MyVar)
> aaa
Dogs 3
Cats 4
Horses 1
Sheep 2
Giraffes 3
> bbb
Dogs 27
Cats 1
Sheep 2
Ocelots 1
期望的输出:
Dogs 30
Cats 5
Horses 1
Sheep 4
Giraffes 3
Ocelots 1
我确信有一种简单的Base R方式可以做到这一点我只是没有看到它。
答案 0 :(得分:2)
首先合并/连接您的输入,然后将表应用于它。
table(c(MyData1$MyVar, MyData2$MyVar))
如果MyVar是一个因素,并且其在MyData1和MyData2中的级别不同,则可能会遇到问题。在这种情况下,只需查找如何合并因子变量。
编辑:如果这不符合您的需要,我建议如下:
在所有“MyDatai”表中合并所有“MyVar”的级别(从您的示例中,我认为这样做是有意义的。)
total_levels <- unique(c(levels(MyData1$MyVar), levels(MyData2$MyVar)))
MyData1$MyVar <- factor(MyData1$MyVar, levels=total_levels)
MyData2$MyVar <- factor(MyData1$MyVar, levels=total_levels)
如果你有大约100个data.frames,显然你需要将它包装成类似应用的函数。
请注意,这是一次性预处理操作,所以我认为如果它有点贵,那就没关系。理想情况下,您可以在生成/加载数据时将其集成到上游。
此时,您的所有“MyVar”都具有相同的级别(当然,内容方面仍然相同)。现在好处是,既然table
适用于级别,那么所有表都将具有相同的条目:
aaa<-table(MyData1$MyVar)
bbb<-table(MyData2$MyVar)
> aaa
Dogs 3
Cats 4
Horses 1
Sheep 2
Giraffes 3
Ocelot 0
> bbb
Dogs 27
Cats 1
Horses 0
Sheep 2
Giraffes 0
Ocelots 1
如果您有很多,可以将它们与aaa+bbb
或sum
相加。添加矢量很快:)
答案 1 :(得分:2)
基础套餐:
aggregate(V2 ~ V1, data = rbind(df1, df2), FUN = sum)
dplyr:
library(dplyr)
rbind(df1, df2) %>% group_by(V1) %>% summarise(V2 = sum(V2))
输出:
V1 V2
1 Cats 5
2 Dogs 30
3 Giraffes 3
4 Horses 1
5 Sheep 4
6 Ocelots 1
数据:
df1 <- structure(list(V1 = structure(c(2L, 1L, 4L, 5L, 3L), .Label = c("Cats",
"Dogs", "Giraffes", "Horses", "Sheep"), class = "factor"), V2 = c(3L,
4L, 1L, 2L, 3L)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA,
-5L))
df2 <- structure(list(V1 = structure(c(2L, 1L, 4L, 3L), .Label = c("Cats",
"Dogs", "Ocelots", "Sheep"), class = "factor"), V2 = c(27L, 1L,
2L, 1L)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA,
-4L))