R语言中for循环仅返回最后一个变量值的问题解决
问题修复方案
问题原因
你的代码核心问题是每次循环都直接覆盖了data_ts变量:前14次循环处理的结果都被下一次循环的赋值操作清空,最终仅保留最后一次(第15个变量)的处理结果。
修复方案1:基于数据框逐步添加列
这种方式无需提前确定结果行数,灵活性更高:
a <- names(monthly) # 初始化空数据框 data_df <- data.frame() for (i in 2:16) { # 单独处理当前变量的月度转季度逻辑 temp_ts <- ts(monthly[[a[i]]], start = c(1982, 1), frequency = 12) temp_quarter <- aggregate.ts(temp_ts, nfrequency = 4) / 3 # 转换为带列名的数据框 temp_df <- as.data.frame(temp_quarter) colnames(temp_df) <- a[i] # 将当前列合并到总数据框 if (ncol(data_df) == 0) { data_df <- temp_df } else { data_df <- cbind(data_df, temp_df) } }
修复方案2:基于矩阵索引填充(匹配你最初的思路)
适合提前明确结果行数的场景:
a <- names(monthly) # 初始化指定行列的矩阵,提前设置列名 data_matrix <- matrix(nrow = 160, ncol = 15) colnames(data_matrix) <- a[2:16] for (i in 1:15) { var_name <- a[i + 1] # 处理月度转季度 temp_ts <- ts(monthly[[var_name]], start = c(1982, 1), frequency = 12) temp_quarter <- aggregate.ts(temp_ts, nfrequency = 4) / 3 # 将结果赋值到矩阵对应列 data_matrix[, i] <- as.numeric(temp_quarter) } # 转换为数据框 data_df <- as.data.frame(data_matrix)
关键注意点
- 用临时变量(如
temp_ts、temp_quarter)存储单次循环的处理结果,避免直接覆盖总数据对象; - 若使用矩阵方案,需确保初始化的行数与
aggregate.ts输出的季度数据行数完全匹配(你设置的160行需验证是否符合实际结果)。
内容的提问来源于stack exchange,提问作者AVR
相关产品推荐
相关产品推荐

