这是此问题的第二部分... How to group daily data into months in a dataframe using dplyr
我设法使用floor_date为日期分配了月份。但是,由于我想对每日观测值进行平均(mean())以使每个月的每月平均值...因此无法使用group_by和summarise,并且我假设这是因为矢量将具有不同的长度?例如,我一年中有148个每日观测值,我想将其转换为12个平均每月观测值。由于数据帧的长度为148个观察值,因此我假设R不喜欢我尝试插入另一列,其向量长度仅为12。
基本上,我有一个数据框,用于保存每日数据的148个观测值,我想将其转换为包含12个观测值的数据框,一个月列,另一列是该月每日观测值的平均值。我最终将需要能够在数千个观察结果中运行此代码。
到目前为止,我有:
WK.2013.edit <- WK.2013 %>%
select(dat_col, Group.Members.Seen) %>%
mutate(month.name=floor_date(WK.2013$dat_col, unit = "month"))
这给我输出:
str(WK.2013.edit)
'data.frame': 148 obs. of 3 variables:
$ dat_col : Date, format: "2013-05-01" "2013-05-02" ...
$ Group.Members.Seen: num 7 6 8 9 9 6 8 9 4 9 ...
$ month.name : Date, format: "2013-05-01" "2013-05-01" ...
当我使用mutate添加一列以获取月平均值时,代码运行,然后我得到一个只有一个值的数据框(我假设它忽略了floor_date并运行了所有每日值的平均值)
所以我尝试了:
test <- WK.2013.edit %>%
group_by(unique(month.name)) %>%
summarise(mean.mem=mean(Group.Members.Seen, na.rm=TRUE))
但是,当我运行摘要代码时,出现错误“错误:列unique(month.name)
的长度必须为148(行数)或一个,而不是8”
答案 0 :(得分:0)
您可以用月平均值创建另一个数据框,然后使用left_join之类的值将它们添加回主数据框。
MonthlyAverage <- ddply(WK.2013.edit,~month.name, summarise, mean.mem=mean(Group.Members.Seen, na.rm=TRUE))
WK.2013.edit <- left_join(WK.2013.edit, MonthlyAverage, by month.name)