R语言如何在循环中为多个dataframe的列名添加对应数字前缀
R批量重命名多dataframe列名解决方案
你的代码存在两处需要调整的逻辑:
col_prefix函数没有用到传入的Mth参数,导致前缀固定- 循环中没有提取每个dataframe对应的序号,且修改后的dataframe没有回写至全局环境,修改无法生效
第一步:修正列名前缀函数
col_prefix <- function(df, Mth){ # 仅修改ID以外的列名,拼接对应月份序号 colnames(df)[2:ncol(df)] <- paste0("Mth", Mth, "_", colnames(df)[2:ncol(df)]) return(df) }
第二步:调整循环逻辑
无需手动输入50个dataframe名称,自动生成列表同时匹配序号:
# 自动生成df1到df50的名称列表 dfList <- paste0("df", 1:50) for (idx in seq_along(dfList)){ # 读取对应dataframe temp_df <- get(dfList[idx]) # 传入对应序号调用重命名函数 temp_df <- col_prefix(temp_df, Mth = idx) # 将修改后的dataframe回写至全局环境 assign(dfList[idx], temp_df) }
更规范的优化方案(可选)
建议将所有同结构dataframe存入列表统一管理,避免全局环境变量过多混淆:
# 批量读取并重命名后存入列表 df_list <- lapply(1:50, function(mth_idx) { col_prefix(get(paste0("df", mth_idx)), Mth = mth_idx) }) # 给列表元素命名,方便后续调用 names(df_list) <- paste0("df", 1:50) # 后续调用df1直接使用 df_list[["df1"]] 即可
内容的提问来源于stack exchange,提问作者Mkew
相关产品推荐
相关产品推荐

