在R循环中将数据框列名替换为对应CSV文件名
问题解决方法
你的代码核心问题是把数据框df当成列名赋值了,这完全不对。正确的做法是提取当前循环的文件名(去掉.csv后缀),用它替换“MEAN”列名。另外还要注意正则匹配的小细节,避免误匹配文件。
修正后的代码如下:
setwd("C:/Desktop/Rain_totals") # 用正则精确匹配以.csv结尾的文件,避免匹配到名字里带csv的其他文件 fs <- list.files(pattern = "\\.csv$") for (f in fs) { df <- read.csv(f) # 提取去掉.csv后缀的文件名(也就是日期字符串) new_colname <- tools::file_path_sans_ext(f) # 替换MEAN列名 colnames(df)[colnames(df) == "MEAN"] <- new_colname # 保存格式化后的文件,row.names=FALSE避免自动添加行号列(不需要可删除) write.csv(df, gsub('\\.csv', '_formatted.csv', f), row.names = FALSE) }
关键修正点:
- 用
tools::file_path_sans_ext(f)安全提取无后缀的文件名,比gsub更可靠(比如遇到带多个点的文件名也能正确处理)。 - 把
pattern = ".csv"改成pattern = "\\.csv$",因为.在正则里是通配符,\\.才表示实际的点,$表示匹配字符串结尾,确保只找真正的CSV文件。
内容的提问来源于stack exchange,提问作者SpookyDLX
相关产品推荐
相关产品推荐

