【问题标题】:How do I calculate the mean of the same time series data several times with different time horizons given from a second data frame?如何使用第二个数据帧给出的不同时间范围多次计算相同时间序列数据的平均值?
【发布时间】:2021-04-23 15:30:17
【问题描述】:

我有两个数据框。一种具有相关时间范围(以年为单位)的观察结果,另一种具有上下文因素的时间序列数据。每次观察的时间范围都不同。我想计算每个观察时间范围的上下文因素时间序列数据的平均值。如果输出成为时间范围数据帧的新列,那将是最好的。

所以如果给出这两个数据框:

            
           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() 并不能完成这项工作。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以使用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.
    

    【讨论】:

    • 非常感谢!非常感谢!
    猜你喜欢
    • 2018-02-28
    • 2022-11-17
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多