r - 如何在 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”,但没有成功。
非常感谢。
解决方案
使用aggregate
. 在您的日期中使用transform
ed 数据来查找数字。例子: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)
推荐阅读
- python - 根据 .CSV 文件中的列数据识别列名
- excel - 如何在 MS Excel 中为一行创建动态范围?
- asp.net-mvc - 如何使用状态码重定向到 MVC 控制器中的另一个 URL
- google-people-api - People API 上的持久化操作似乎比 Contacts API 上的慢得多
- isabelle - Sledgehammer 如何将 lambda 抽象转换为 ATP?
- java - 我可以在我的索引器客户端中使用 solrj 驱动程序 8.5.0 而不登录 log4j2 吗?
- oracle - 在非常大的 IN 子句上获取 ORA-00913
- scroll - 在 mosh 中,我如何在终端中回滚并在 emacs、less 等中使用鼠标
- c# - 如何动态加载和卸载(重新加载).dll 程序集
- python - Python创建一个不重复的数字序列