将每日数据框折叠为R

时间:2016-04-19 22:19:45

标签: r

我的数据框如下:

     office string_date   A   B  C   D    E
1:      11  2010-06-01    0   0  1   0    0
2:      11  2010-06-02    0   0  0   1    0
3:      11  2010-06-03    0   0  0   1    0
4:      11  2010-06-04    0   0  0   1    0
5:      11  2010-06-05    0   0  0   1    0
6:      11  2010-06-06    0   1  0   0    0
7:      11  2010-06-07    0   1  0   0    0
8:      11  2010-06-08    0   1  0   0    0
9:      11  2010-06-09    0   1  0   0    0
10:     11  2010-06-10    0   1  0   0    0
11:     11  2010-06-11    0   1  0   0    0
12:     11  2010-06-12    0   1  0   0    0

我需要按周汇总每列的总和,而不是列出的那一天。因此,每个办公室每个星期都会留下,每列的总和。第一行是......

office  week   A  B  C  D  E
  11     1     0  2  1  4  0
  11     2     .............

我使用的是:

agg <- aggregate(list(data$A, data$B, data$C, data$D, data$E), list(office = data$office, Date = data$string_date), sum)

但是,当然这没有任何能够按周缩短日期的能力。此外,这些日期是字符串,目前不是posix。

1 个答案:

答案 0 :(得分:1)

使用week函数创建一个名为week的新列,然后执行split-apply-combine:

DT[,week := week(string_date)][, lapply(.SD, sum), by = "office,week", .SDcols = 3:6]

dplyr

library(dplyr)
DT %>%
  group_by(office, week = week(string_date)) %>% 
  summarise_each(funs(sum), -string_date)