在R

时间:2015-08-19 16:06:07

标签: r

我在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方式可以做到这一点我只是没有看到它。

2 个答案:

答案 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+bbbsum相加。添加矢量很快:)

答案 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))