我有一个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
的数据,在您 format
您的日期 %W
eek数字。例子。
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)
试试这个。
首先将日期转换为星期,然后计算每个城市和每个星期的平均数,用以下方法计算 group_by
.
你需要 dplyr
为此。
library(dplyr)
data.frame_result = data.frame1 %>%
mutate(weeks = format(as.Date(date, "%Y-%m-%d"), "%V")) %>%
group_by(city, weeks) %>%
summarize(avgPM25 = mean(as.numeric(pm2.5))) %>%
ungroup()