2014-04-16 10 views
-3

각기 300 개의 CSV 파일이있는 폴더가 있으며 각 파일에는 헤더가있는 데이터 프레임이 들어 있습니다. 이름은 001.csv002.csv입니다. 모든 파일은 동일한 네 개의 열 (Date, sulfate, nitrateID)이지만 관찰 수는 다양합니다.VSC 파일을 하나의 데이터 프레임으로 병합하는 기능보다

사용자가 하나 또는 모든 범위의 파일을 선택하고 병합 된 파일의 모든 데이터를 유지하면서 하나의 데이터 프레임으로 병합 할 수있는 기능을 만들고 싶습니다. 중복 찾기 등). 내가 병합이라고 말하면, 새로운 병합 된 데이터 프레임에는 두 파일의 관찰 결과가있는 네 개의 열이 여전히 남아 있음을 의미합니다. (:, 1로드 할 파일 001.csv274로드 274.csv20:100 파일을로드 100.csv을 통해 020.csv 파일 예) 다음

directory이 파일의 위치이고 id로드 할 파일을 지정합니다 내가 지금까지 한 일이다.

저는 하나의 파일을로드 할 때만 작동합니다. 범위를로드하려면 빈 데이터 프레임이 필요합니다. 예를 들어, 내가 실행하는 경우 :

specdata이 파일이있는 및 1:10는 내가 새로운 데이터 프레임 ( newDF) 0과를 얻을, 처음 10 개 파일을로드 할 의미있는 폴더의 이름입니다
newDF <- getfile3("specdata", 1:10) 

관측 및 3 변수 : V1, V2, y[FALSE,] (및 row.names).
원본 파일의 4 가지 변수가있는 7,304 개의 관찰이 있어야합니다.

문제는 내 for 루프에 있습니다. (`newDF <-do.call :

+0

아래에 코드를 변경

하지만 당신은 같은 것을 사용하여 한 번에 모든 파일을로드 할 수 있습니다 rbind, lapply (list.files (path = "~/specdata", pattern = "* .csv"), read.csv, header = TRUE, sep = ","))' – BlankUsername

+0

if numOfFiles! = 2. 그것을 읽고 나서 병합해야합니다. – infominer

+0

이것은 숙제이며 그렇게 표시되어야합니다. 사실, 저는 지금 같은 숙제를하고 있습니다 ... 그것은 JHU의 Coursera의 "R programming"수업에서 나온 것입니다. – grisaitis

답변

0
내가 하위 선택을 수행하는 방법을 모르는 등
if(numOfFiles < 2) { # if only one file is requested... 
    dataset <- read.csv(filedir, header = TRUE) # use read.csv 
} else { # else loop over each file requested and merge into "dataset" 
     #Use lapply to read in your data 
     data.reqd <-lapply(filedir, read.csv, header=T) 
     #Merge all the data, using Reduce 
     dataset <-Reduce(function(...) merge(...,all=T),data.reqd) 
    } 
return(dataset) 
} 
관련 문제