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

R语言如何基于工作区各dataframe的名称为其新增对应year列

问题原因

你在循环中通过get()获取到的是dataframe的临时副本,对副本的修改不会自动同步到工作区的原始对象,所以会出现print输出符合预期,但原变量没有更新的情况。

修正代码(直接适配现有逻辑)

for (d in dfs) {
  # 取出工作区中的原dataframe
  temp_df <- get(d)
  # 从df名称中提取年份,无需硬编码判断2004/2005,适配所有后缀为_四位年份的df
  temp_df$year <- as.integer(sub(".*_(\\d{4})$", "\\1", d))
  # 将修改后的dataframe赋值回工作区的对应变量
  assign(d, temp_df)
}

验证修改

运行后即可直接查看原始dataframe的更新结果:

df_2004
df_2005

可选优化方案(符合R最佳实践)

如果你的df数量较多,更推荐将所有dataframe整合到一个命名列表中统一管理,避免工作区变量杂乱:

# 读取所有目标df到列表
df_list <- mget(dfs)
# 批量新增year列
df_list <- lapply(names(df_list), function(name) {
  df <- df_list[[name]]
  df$year <- as.integer(sub(".*_(\\d{4})$", "\\1", name))
  return(df)
})
# 给列表元素命名,方便后续取用
names(df_list) <- dfs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:39:02