Дополнительная помощь необходима для того, что кажется мне простым, но я просто не могу найти элегантное решение.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"
Может ли кто-нибудь помочь?
Работает отлично. Еще лучше, когда «each = 5» можно заменить на длину (colnames (df))/length (имена файлов). Приветствия за это – BarneyC