首页 > 解决方案 > 如何在 R 中按周和城市计算平均值

问题描述

我有一个这样的 date.frame:

#         city          date       pm2.5      
#1       beijing       2018-1-1      12.5  
#2       beijing       2018-1-2       14 
#3       beijing       2018-1-3       15  
          ...           ...           ...
#365     beijing       2018-12-31     50
#366     shanghai      2018-1-1       14
#367     shanghai      2018-1-2       15
          ...             ...         ...
#730     shanghai      2018-12-31     60

如何pm2.5通过weeks和计算变量的平均值city。看起来像这样:

期望的输出:

#         city          weeks       pm2.5      
#1       beijing          1        13  
#2       beijing          2        14 
#3       beijing          3        15  
          ...           ...           ...
#42     beijing          42       50
#43     shanghai          1       14
#44     shanghai          2       15
          ...           ...         ...
#84     shanghai          42       55

我尝试使用“apply.weekly”,但没有成功。

非常感谢。

标签: raggregate

解决方案


使用aggregate. 在您的日期中使用transformed 数据来查找数字。例子:format%W

res <- aggregate(value ~ week + city, data=transform(dat, week=format(date, "%W")), mean)
res[1:5, ]
#    week city    value
# 1   00    A 6.500000
# 2   01    A 6.857143
# 3   02    A 4.857143
# 4   03    A 5.857143
# 5   04    A 5.714286

res[52:57, ]
#    week city    value
# 52   51    A 5.714286
# 53   52    A 3.500000
# 54   00    B 6.500000
# 55   01    B 5.000000
# 56   02    B 3.285714
# 57   03    B 5.428571

请注意,您需要将日期变量格式化为"date",即当您将其设置为"character"格式时,您需要dat$date <- as.Date(dat$date)事先进行操作。


玩具数据

dat <- expand.grid(city=LETTERS[1:3],
            date=seq.Date(as.Date("2019-01-01"), as.Date("2019-12-31"), "day"))
set.seed(42)
dat$value <- sample(1:10, nrow(dat), replace=T)

推荐阅读