如何使用dplyr第2部分将每日数据分成一个数据帧中的月份

时间:2019-07-31 20:23:29

标签: r dplyr

这是此问题的第二部分... 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”

1 个答案:

答案 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)