![](/img/trans.png)
[英]How do I calculate means of time series data with different time horizons and NAs in R
[英]How do I calculate the mean of the same time series data several times with different time horizons given from a second data frame?
我有两个数据框。 一种具有相关时间范围(以年为单位)的观察结果,另一种具有上下文因素的时间序列数据。 每次观察的时间范围都不同。 我想计算每个观察时间范围的上下文因素时间序列数据的平均值。 如果 output 成为时间范围数据帧的新列,那将是最好的。
因此,如果给出这两个数据框:
time_horizon <- data.frame(observation = c("A", "B", "C"),
start = c(2010, 2012, 2011),
end = c(2013, 2014, 2015)
)
data <- data.frame(Year = c(2010:2015),
Value = c(26374, 21134, 21212, 21111, 21344, 22222)
)
结果我需要这样的东西:
output <- data.frame(observation = c("A", "B", "C"),
start = c(2010, 2011, 2012),
end = c(2013, 2014, 2015),
mean = c(22457.75, 21222.33, 21404.6)
)
我已经尝试了几种这样的代码组合。
time_horizon$mean <- mean(
data$Value[data$Year >= time_horizon[, "start"] &
data$Year <= time_horizon[, "end"]
]
)
但显然这只会产生一列相等的值,所以我猜mean()
单独并不能完成这项工作。
您可以使用fuzzyjoin
:
library(dplyr)
fuzzyjoin::fuzzy_inner_join(time_horizon, data,
by = c('start' = 'Year', 'end' = 'Year'),
match_fun = c(`<=`, `>=`)) %>%
group_by(observation, start, end) %>%
summarise(mean = mean(Value)) -> result
result
# observation start end mean
# <chr> <dbl> <dbl> <dbl>
#1 A 2010 2013 22458.
#2 B 2012 2014 21222.
#3 C 2011 2015 21405.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.