我有大约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个数据帧放入列表中,或者我可以将其转换为单个大数据帧。我尝试了各种方法,但不能完全实现。
答案 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