为每个唯一值对汇总数据帧行

时间:2014-09-24 13:01:47

标签: r sum dataframe aggregate

我有一个如下所示的数据框:

 > df
           date day        x    y   z
[1]  2014-02-24 Thursday   100  83  39
[2]  2014-02-26 Wednessday 486 189 171
[3]  2014-02-26 Wednessday 426 427 428
[4]  2014-02-26 Wednessday 423 286 195
[5]  2014-02-27 Thursday   374 339 229
[6]  2014-02-27 Thursday   744 496 489

我想为每个唯一的xy变量对zdateday求和。它应该是这样的:

           date day        x    y   z
[1]  2014-02-24 Thursday   100  83  39
[2]  2014-02-26 Wednessday 1335 902 794
[6]  2014-02-27 Thursday   1118 835 718

有任何帮助吗?非常感谢!!

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点(以及关于SO的许多答案)如何做到这一点。

以下是三种常用方法,一种是基础R,一种是使用“data.table”,另一种是使用“dplyr”。

aggregate(cbind(x, y, z) ~ date + day, mydf, sum)
#         date        day    x   y   z
# 1 2014-02-24   Thursday  100  83  39
# 2 2014-02-27   Thursday 1118 835 718
# 3 2014-02-26 Wednessday 1335 902 794

library(data.table)
as.data.table(mydf)[, lapply(.SD, sum), by = list(date, day)]
#          date        day    x   y   z
# 1: 2014-02-24   Thursday  100  83  39
# 2: 2014-02-26 Wednessday 1335 902 794
# 3: 2014-02-27   Thursday 1118 835 718

library(dplyr)
mydf %>% group_by(date, day) %>% summarise_each(funs(sum))
# Source: local data frame [3 x 5]
# Groups: date
# 
#         date        day    x   y   z
# 1 2014-02-24   Thursday  100  83  39
# 2 2014-02-26 Wednessday 1335 902 794
# 3 2014-02-27   Thursday 1118 835 718

答案 1 :(得分:-1)

尝试使用连接'date'和'day'的人工柱进行tapply。