簡體   English   中英

在加權平均值計算中的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函數?

我找到了一種生成帶有每月加權平均數據的表的方法:

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))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM