R 中的循环重复加权平均计算中的列

Loop in R duplicates columns in weighted average calculations

我有一个包含 137 个 xts 对象的列表,每个对象都有 4 个变量。每个元素都是按月划分的每日系列。

示例代码:

recession <- sample(1:100, 4169, replace = TRUE)
unemployed <- sample(1:100, 4169, replace = TRUE)
jobs <- sample(1:100, 4169, replace = TRUE)
insurance <- sample(1:100, 4169, replace = TRUE)
# sequence of daily dates from January 1st 2004 to May 31st 2015:
new1 <- seq(from=as.Date("2004-01-01"), to=as.Date("2015-05-31"), by = "day") 
daily_df <- data.frame(date=as.Date(new1), unemployed, jobs, recession, insurance)
library(xts)
daily_series <- xts(daily_df[-1], order.by = as.Date(new1))
# split daily series into monthly elements of daily data:
split_list <- split(daily_series, f = "months", drop = FALSE, k = 1)

我想做的是计算列表中所有变量和元素的加权平均值,所以我 运行 下面的代码:

monthly_av = NULL
for (i in 1:length(split_list)) {
for (j in 1:ncol(split_list[[i]])) {
monthly_av = cbind(monthly_av, xts(weighted.mean(split_list[[i]][,j]), order.by = index(split_list[[i]][1])))
}}

然而,它给我的输出是这样的:

我想要的输出是一个 xts 对象,它有 137 行和 4 列,对应于 4 个变量。我不明白为什么会发生这种情况 - 我是否错误指定了循环,或者是 cbind 函数在执行此操作?

我找到了用每月加权平均数据生成 table 的方法:

data <- do.call(rbind, 
        lapply(1:length(split_list)
               , function(x) apply(split_list[[x]], 2, weighted.mean)))

> dim(data)
[1] 137   4

这将维护一个 xts 对象:

data_xts <- do.call(cbind, lapply(1:4, function(x) 
  apply.monthly(daily_series[,x],weighted.mean)))

并使用 for 循环:

monthly_av = NULL
for (i in 1:ncol(daily_series)){
  monthly_av <- cbind(monthly_av, apply.monthly(daily_series_ts[,i],weighted.mean))
}