2015-01-29 4 views
0

더 많은 도움이 필요합니다. 제게는 솔직한 것처럼 보이지만 제게는 우아한 해결책을 찾을 수 없습니다. R 목록을 기반으로 데이터 프레임 열 이름 바꾸기

> 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" 

내가 할 수있을 필요가있는 무엇 .... 나는 COLNAMES 각 소스 CSV에 대해 동일합니다 (3 CSV의의 cbind에서 오는) 15 열이있는 dataframe을 말해봐 모든 컬럼 이름에 소스 파일 이름을 접두사로 붙이면 모든 것이 작동 가능합니다.

나는 이것을 수동으로 할 수 있지만 이상적으로 (소스의 수와 칼럼이 바뀔 수 있기 때문에) 어떤 파일명이 어떤 칼럼에 들어가는 지 알아내는 것이 정말 간단해야한다. 그것은 나에게 다음과 같은 일을하지만 아마 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

은 어쩌면 당신은 모든 dataframes 5 열이 가정이 사용할 수 있습니다 : 그것은 단지 그들에게 다섯 번 반복하여 GSUB를 사용하여 파일 이름을 얻는다 다음 원래 열 이름으로 그것들을 연결해

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

+0

완벽하게 작동합니다. "each = 5"가 길이 (colnames (df))/길이 (파일 이름)로 대체 될 수있는 경우조차 더 좋습니다. 건배 – BarneyC

관련 문제