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
相关产品推荐
相关产品推荐

