繁体   English   中英

如何使用第二个数据帧给出的不同时间范围多次计算相同时间序列数据的平均值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM