R根据列表重命名数据框列

R Rename Dataframe Columns Based on List

需要更多帮助,因为在我看来很简单,但我找不到优雅的解决方案。

假设我有一个包含 15 列的数据框(来自 3 个 csv 的 cbind),其中每个源 CSV 的列名相同....

> filenames <- list("file1.csv","file2.csv","file3.csv")
> df <- do.call("cbind", lapply(filenames, read.csv, header = TRUE)) 
> colnames(df)    
[1] "Col1" "Col2" "Col3" "Col4" "Col5" "Col1" "Col2" "Col3" "Col4" "Col5" 
[11] "Col1" "Col2" "Col3" "Col4" "Col5"

我需要做的是在每个列名前加上源文件名,这样整个事情才可行。

我可以手动执行此操作,但理想情况下(因为源的数量和列的数量可能会发生变化)计算出哪个文件名与哪些列对应应该非常简单。在我看来,下面的工作可以完成,但我确信有一条更简单的路线可能是通过遍历 filePrefix 和 colnames(df)。

> filePrefix <- lapply(seq_along(filenames), function(i) gsub(".csv","",filenames[i]))

> newColNames <- lapply(seq_along(colnames(df)[1:5]), function(i) paste(filePrefix[1],"_",colnames(df)[i],sep=""))

> newColNames <- c(newColNames, lapply(seq_along(colnames(df)[6:10]), function(i) paste(filePrefix[2],"_",colnames(df)[i],sep=""))

> newColNames <- c(newColNames, lapply(seq_along(colnames(df)[11:15]), function(i) paste(filePrefix[3],"_",colnames(df)[i],sep=""))

> colnames(df) <- newColNames

> colnames(df)
[1] "file1_Col1" "file1_Col2" "file1_Col3" "file1_Col4" "file1_Col5" "file2_Col1" "file2_Col2" "file2_Col3" "file2_Col4" "file2_Col5"
[11] "file3_Col1" "file3_Col2" "file3_Col3" "file3_Col4" "file3_Col5"

有人可以帮忙吗?

也许你可以使用它,假设你所有的数据框都有 5 列:

colnames(df)<-paste(rep(gsub(".csv","",filenames),each=5),colnames(df),sep="_")

它只是使用您的 gsub 获取文件名,重复五次,然后将它们与原始列名连接起来