【问题标题】:Add multiple same length time-series data frames into one column将多个相同长度的时间序列数据帧添加到一列中
【发布时间】:2018-12-07 23:32:12
【问题描述】:

希望将 15 个数据框中的一个变量按日期汇总到一列中。

尝试将它们全部转换为 xts,但在将它们从阶乘转换回数字时遇到了挑战。

library(xts)
ts1<-as.xts(ts(c(1:12),star=c(2015,1),freq=12))
ts2<-as.xts(ts(c(13:24),star=c(2015,1),freq=12))
ts3<-as.xts(ts(c(13:24),star=c(2015,1),freq=12))
str(ts4 <- c(ts1, ts2,ts3))

还查看了 tibble vignette,但无法将它们正确地添加在一起。也尝试使用rowsum,但仅在数据位于一个数据帧中时才有效。感谢您的宝贵时间。

【问题讨论】:

    标签: r time-series aggregate add


    【解决方案1】:

    我认为这会产生您正在寻找的东西。 param_df 将是一个数据框,其中包含每对分布的 N、均值和 sd。

    # Generate some fake parameters
    param_df <- data.frame(n_1 = sample(50:100, 10, replace = T),
                           mean_1 = sample(5:10, 10, replace = T),
                           sd_1 = sample(1:9, 10, replace = T),
                           n_2 = sample(50:100, 10, replace = T),
                           mean_2 = sample(5:10, 10, replace = T),
                           sd_2 = sample(1:9, 10, replace = T),
                           variable_name = paste0("variable_", 1:10), 
                           stringsAsFactors = F)
    
    # Function that will generate the distributions and calculate statistics
    my_function <- function(n_1, mean_1, sd_1, n_2, mean_2, sd_2, var_name){
      samp_A <- rnorm(as.numeric(n_1), as.numeric(mean_1), as.numeric(sd_1))
      samp_B <- rnorm(as.numeric(n_2), as.numeric(mean_2), as.numeric(sd_2))
      var_score <- (mean(samp_A) + mean(samp_B)) / 2
      var_range <- sd(samp_A)
      return(c(Variable = var_name, Score = var_score, Range = var_range))
    }
    
    # Apply the function to the param_df by row, passing each column as an argument to the function
    df <- apply(param_df, 1, function(params) my_function(params[1],
                                                          params[2],
                                                          params[3],
                                                          params[4],
                                                          params[5],
                                                          params[6],
                                                          params[7]))
    # Convert to a dataframe
    df <- as.data.frame(t(df))
    

    请注意,此处的代码计算“分数”的方式与您上面的代码不同。我假设您想除以平均值的总和,然后将 A 的平均值和 B 的平均值相加。

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 1970-01-01
      • 2022-12-02
      • 2016-08-01
      • 1970-01-01
      • 2022-07-07
      • 2020-04-19
      • 2016-09-04
      • 2020-12-04
      相关资源
      最近更新 更多