R,如何在R数据帧中聚合具有相同日期字段的数据

时间:2015-03-24 11:25:54

标签: r dataframe

您好我有一个R数据框,如下所示:

        SURVEY.DATE A   B   C
1898    2010-05-13  38  34  21
1899    2010-05-13  38  33  21
1897    2010-05-14  37  34  21
1895    2010-05-21  38  29  21
1896    2010-05-21  39  32  21
1894    2010-05-23  39  32  21

我想对具有相同日期的行进行平均,以便每天只进行一次平均观察。理想情况下,我想得到一个xts obsject,看起来像:

        SURVEY.DATE    A      B  C
1898    2010-05-13    38   33.5 21
1897    2010-05-14    37     34 21
1896    2010-05-21  38.5   30.5 21
1894    2010-05-23    39     32 21

对我的新手R技能来说似乎是一个挑战...任何帮助/指针将不胜感激

2 个答案:

答案 0 :(得分:2)

你可以尝试

library(dplyr)
res <- df1 %>%
         group_by(SURVEY.DATE) %>% 
         summarise_each(funs(mean))

或者

res1 <- aggregate(.~SURVEY.DATE, df1, mean)

然后将其转换为xts

library(xts)
xts(res1[-1], order.by= as.Date(res1[,1]))
#             A    B  C
#2010-05-13 38.0 33.5 21
#2010-05-14 37.0 34.0 21
#2010-05-21 38.5 30.5 21
#2010-05-23 39.0 32.0 21

答案 1 :(得分:1)

以下是我使用data.table执行此操作的方法。

require(data.table)
setDT(df)[, lapply(.SD, mean), by=SURVEY.DATE]
#    SURVEY.DATE    A    B  C
# 1:  2010-05-13 38.0 33.5 21
# 2:  2010-05-14 37.0 34.0 21
# 3:  2010-05-21 38.5 30.5 21
# 4:  2010-05-23 39.0 32.0 21

如果您想了解更多信息,请查看new HTML vignettes