2015-01-29 4 views
0

Дополнительная помощь необходима для того, что кажется мне простым, но я просто не могу найти элегантное решение.R Переименовать столбцы DataFrame на основе списка

Скажем, у меня есть dataframe с 15 колоннами (поступающих из cbind из 3-х) в формате CSV, где COLNAMES одинаковы для каждого источника 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" 

Что мне нужно, чтобы быть в состоянии сделать префикс каждого имени столбца с исходным именем файла, чтобы все это выполнимо.

Я могу сделать это вручную, но в идеале (по мере того, как количество источников и, следовательно, столбцы могут меняться), должно быть очень просто определить, с каким именем файла идут какие столбцы. Мне кажется, что следующая работа выполняется, но я уверен, что есть более простой маршрут, возможно, путем перебора файлов и файлов (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

Может быть, вы можете использовать это, предполагая, что все ваши dataframes имеют 5 столбцов:

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

он просто получает имена файлов с помощью GSUB, повторяет их в пять раз, а затем присоединяет их с оригинальными названиями столбцов

+0

Работает отлично. Еще лучше, когда «each = 5» можно заменить на длину (colnames (df))/length (имена файлов). Приветствия за это – BarneyC

Смежные вопросы