R按索引(日期)汇总多个数据帧的列表

时间:2014-08-19 22:58:19

标签: r list sum dataframe

我有大约6000个数据框,其数据如下:

           over10 over20 over50 over100
2014-01-02      1      1      0       0

每个数据框都有数百行。

我需要按索引(日期)对所有数据帧中的四列求和。结果将是每个日期一行,其中包含求和值。因此,在6000个数据帧之后,结果可能是:

           over10 over20 over50 over100
2014-01-02   3121   2551   1670     985

每个日期会继续一行。

我可以很容易地将6000个数据帧放入列表中,或者我可以将其转换为单个大数据帧。我尝试了各种方法,但不能完全实现。

2 个答案:

答案 0 :(得分:3)

dplyr方法是:

创建样本数据

set.seed(42)
all <- data.frame(date=sample(seq(as.Date("2000/1/1"), as.Date("2003/1/1"), by = "quarter"),
                              100,replace=TRUE),
                over10 = rbinom(100,50,0.5),
                over20 = rbinom(100,50,0.5),
                over50 = rbinom(100,50,0.5),
                over100 = rbinom(100,50,0.5))

group <- sample(1:5,100,replace=TRUE)
all_split <- split(all, group)

所以all_split是一个包含所有data.frames的列表。这有必要将它们与dplyr::rbind_all结合起来(见后文)。 组合后,您可以轻松使用dplyr汇总数据:在您的情况下总结它们。

实际代码

require(dplyr)

dat <- rbind_all(all_split) # This is a big data.frame with all data
dat %>%
  group_by(date) %>%
  summarise_each(funs(sum))

结果:

Source: local data frame [13 x 5]

         date over10 over20 over50 over100
1  2000-01-01    220    187    202     205
2  2000-04-01    175    164    173     159
3  2000-07-01    159    171    185     185
4  2000-10-01    168    176    154     182
5  2001-01-01    145    138    150     160

答案 1 :(得分:1)

使用@ Floo0

提供的数据集
aggregate(all[,2:5], by=list(all$date), sum)

aggregate(all[,names(all)!="date"], by=list(all$date), sum

      Group.1 over10 over20 over50 over100
1  2000-01-01    220    187    202     205
2  2000-04-01    175    164    173     159
3  2000-07-01    159    171    185     185
4  2000-10-01    168    176    154     182
5  2001-01-01    145    138    150     160
6  2001-04-01    179    164    152     178
7  2001-07-01    207    200    207     191
8  2001-10-01    133    131    142     112
9  2002-01-01    262    242    255     236
10 2002-04-01    242    251    262     251
11 2002-07-01    177    166    168     169
12 2002-10-01    156    147    163     125
13 2003-01-01    286    299    293     302