You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环将数据框指定观测列合并至主数据框?

问题根源

你代码里的核心问题是:循环中fin = tolower(unlist(vari))得到的是字符串形式的变量名(比如"indpro"),而非你通过assign创建的实际数据框对象。直接cbind(masterlist, fin)相当于把这个字符串重复成一列添加,自然无法得到目标观测列。

解决方案

方案1:修改现有循环,提取目标列

利用get()函数根据字符串变量名获取对应的数据框对象,再提取其中的观测列(跳过已有的date列):

# 不含GDP的变量列表
vari_list2 <- c("INDPRO","PI","SAVINGSL", "UNEMPLOY","HOUST")

# 按日期合并数据框观测列的循环
for(vari in vari_list2){
  var_name <- tolower(vari)
  # 获取对应数据框,提取目标观测列(drop=FALSE确保返回数据框而非向量)
  target_col <- get(var_name)[, var_name, drop = FALSE]
  masterlist <- cbind(masterlist, target_col)
}

方案2:用列表存储数据,批量合并(推荐)

避免使用assign创建大量全局变量,改用列表统一存储数据,再通过reduce一次性合并,更符合tidyverse风格且更安全:

library(alfred)
library(dplyr)
library(tidyverse)

# 变量列表
vari_list <- c("GDP","INDPRO","PI","SAVINGSL", "UNEMPLOY","HOUST")

# 批量获取并格式化数据,存入列表
data_list <- map(vari_list, function(vari) {
  temp1 <- get_fred_series(vari, "value")
  data.frame(date = seq(as.Date("1776-07-04"), as.Date("2022-09-16"), 1)) %>% 
    left_join(temp1) %>% 
    fill("value") %>% 
    rename(!!tolower(vari) := value) # 直接重命名列,更简洁
})

# 给列表命名,方便后续操作
names(data_list) <- tolower(vari_list)

# 按date列合并所有数据框,自动去重date列
masterlist <- reduce(data_list, left_join, by = "date")

内容的提问来源于stack exchange,提问作者gillyp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:45:49