我像这样阅读了我的所有文件:
tables <- lapply(files, function(x) read.table(x, col.names=c("unit","count")))
稍后我将使用 unit
列合并它们。但是,我希望我可以使用变量 files
中的原始文件名作为第二列,而不是 count
。那是因为我稍后会像这样执行合并:
MyMerge <- function(x, y){
df <- merge(x, y, by="unit", all.x= TRUE, all.y= TRUE)
return(df)
}
data <- Reduce(MyMerge, tables)
这会导致问题,因为 merge
函数无法处理超过 3 个非唯一列名(这些列名变成 count.x、count.y 和 count,因此我的脚本无法处理超过 3 个文件)。
最佳答案
它应该像这样做一样简单:
tables <- lapply(files, function(x) read.table(x, col.names=c("unit", x)))
也许您还想在将其添加为列名之前稍微清理一下文件名,例如:
col.names=c("unit", gsub('\\.csv', '', x))
如果您想从库名称或类似名称中删除 .csv
关于使用Reduce合并R中的许多表时用文件名重命名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37168689/