我有一个20年来的每日温度测量数据框架。我想计算每年数据序列中的年度范围(即以20个值结束,代表每年的范围)。示例数据:
begin_date = as.POSIXlt("1990-01-01", tz = "GMT")
dat = data.frame(dt = begin_date + (0:(20*365)) * (86400))
dat = within(dat, {speed = runif(length(dt), 1, 10)})
我想写一个循环,通过每年,然后计算范围,但希望有另一个解决方案。
我认为最好的方法是获得每年的最大值和最小值,然后以此计算范围。谁能建议一种方法来做到这一点,而不是写一个循环,通过每一年单独?
Try
library(dplyr)
dat %>%
group_by(year=year(dt)) %>%
summarise(Range=diff(range(speed)))
或
library(data.table)
setDT(dat)[, list(Range=diff(range(speed))), year(dt)]
或
aggregate(speed~cbind(year=year(dt)), dat, function(x) diff(range(x)))