2016-08-24 4 views
1

동일한 명령을 x 번 반복하려고하면, 같은 이름의 파일을 10 번 읽는 간단한 예제가됩니다.이 작업을 수행 할 수 있습니다.x 번 동일한 명령 반복하기

yr2001detail<-read.csv("E:/yr2001detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2002detail<-read.csv("E:/yr2002detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2003detail<-read.csv("E:/yr2003detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2004detail<-read.csv("E:/yr2004detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2005detail<-read.csv("E:/yr2005detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2006detail<-read.csv("E:/yr2006detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2007detail<-read.csv("E:/yr2007detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2008detail<-read.csv("E:/yr2008detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2009detail<-read.csv("E:/yr2009detail.csv",stringsAsFactors = FALSE,header=TRUE) 
yr2010detail<-read.csv("E:/yr2010detail.csv",stringsAsFactors = FALSE,header=TRUE) 

나 자신을 반복하고 있기 때문에 또한 너무 많은 파일이 있거나 너무 많이 반복해야하는 경우 정말 시간이 많이 걸리기 때문에 나쁘다. 나는 때문에 왼쪽의 일을 일부러

for(i in 1:10){ 
paste("yr",2000+i,"detail",sep="")<-read.csv(paste("E:/yr",2000+i,"detail.csv",sep=""),stringsAsFactors = FALSE,header=TRUE) 
} 

을하고 탐구하는 시도, 또한 나뿐만 더 아래 길을 따라 요청하고이

vector <- rep(NA,10) 
for(i in 1:10){ 
vector[i] <- paste("yr",2000+i,"detail",sep="") 
} 
for(i in 1:10){ 
vector[i]<-read.csv(paste("E:/yr",2000+i,"detail.csv",sep=""),stringsAsFactors = FALSE,header=TRUE) 
} 

, 내 데이터를 처리해야합니다 매년 반복되는 명령을 매년 할당하는 것을 의미합니다.

답변

4

우리는 '파일'등을 만들 sprintf를 사용할 수있는 '파일 이름'

files <- sprintf("E:/yr%ddetail.csv", 2001:2010) 
filenames <- sprintf("yr%ddetail", 2001:2010) 

심지어 paste이 그것을 읽을 수있는 파일을 통해

files <- paste0("E:/", 2001:2010, "detail.csv") 
filenames <- paste0("yr", 2001:2010, "detail") 

다음 루프를 사용할 수 있습니다. 우리는 분리 된 객체가 필요한 경우, 그러나, 즉, 오히려 글로벌 환경에서 많은 개체를 갖는 것보다 list에서 읽어

lst <- setNames(lapply(files, read.csv, stringsAsFactors=FALSE, header=TRUE), filenames) 

아니면 더 나은, assign

for(j in seq_along(filenames)){ 
    assign(filenames[j], read.csv(files[j], stringsAsFactors=FALSE, header=TRUE)) 
} 

를 사용 빠른 옵션 사용 fread

library(data.table) 
lst <- setNames(lapply(files, fread), filenames) 

list, rbind 데이터 세트를 하나의 데이터 세트에 함께 포함 할 수 있으며 해당 데이터 세트의 출처를 나타내는 'id'열이 있습니다. 이것은 여러 작업에서 유용 할 수 있습니다.

dt <- rbindlist(lst, idcol="Grp") 
+1

귀하의 의견을 보내 주셔서 감사합니다, 솔루션의 첫 번째 부분은 내가 gobal 환경을 혼란스럽게하더라도, 나는 목록에 비해 지금은 개체를 클릭하고 싶습니다. 이것은 서브셋 주석을 10 회 사용하는 대신 모든 데이터를 한 번에 서브 세트하는 것과 같은 다른 기능을 사용할 수 있기 때문에 훌륭합니다. – Donkeykongy