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

时间:2015-01-29 14:12:15

标签: r csv

请求更多帮助,因为我觉得这很简单,但我找不到一个优雅的解决方案。

假设我有一个包含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"

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

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

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

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