R语言如何通过文件名列表批量修改多个数据框的score变量值
解决方案
核心原因是你拼接得到的是字符串,R不会自动将字符串识别为可操作的变量对象,需要搭配get()读取对象、assign()回写修改后的对象实现需求。
首先修正你原代码里的几个问题:
- R的for循环语法为
for (i in 遍历向量) {},你写的for i to length(filelist)是其他编程语言的写法,本身就会执行报错 - 你提供的
filelist里有重复的file4,建议先去重避免重复操作相同数据框 - 你用到了
mapvalues函数,需要先加载plyr包
循环实现代码
library(plyr) # 先对数据框名去重 filelist <- unique(filelist) for (i in seq_along(filelist)) { # 根据字符串名称取出对应数据框 current_df <- get(filelist[i]) # 修改score字段 current_df$score <- mapvalues(current_df$score, from = value$A, to = value$B) # 将修改后的数据框写回全局环境 assign(x = filelist[i], value = current_df, envir = .GlobalEnv) }
更简洁的lapply实现(无需显式写循环)
library(plyr) # 加invisible避免lapply输出无用的列表结果 invisible(lapply(unique(filelist), function(df_name) { current_df <- get(df_name) current_df$score <- mapvalues(current_df$score, from = value$A, to = value$B) assign(df_name, current_df, envir = .GlobalEnv) }))
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

