2013-07-27 2 views
2

다른 이름의 다른 CSV 파일이 있습니다. 몇 가지 계산을하고 싶은데 그 결과를 하나의 CSV 파일에 저장하고 싶습니다.여러 파일에 대해 동일한 계산 수행

파일 1 : 두 개의 CSV 파일의

내 데이터 형식이

day     price 
2000-12-01 00:00:00 2 
2000-12-01 06:00:00 3 
2000-12-01 12:00:00 NA 
2000-12-01 18:00:00 3 

파일을 2 :

day     price 
2000-12-01 00:00:00 12 
2000-12-01 06:00:00 NA 
2000-12-01 12:00:00 14 
2000-12-01 18:00:00 13 

나는이 사용하는 파일을 읽으려면 :

file1 <- read.csv(path_for_file1, header=TRUE, sep=",") 
file2 <- read.csv(path_for_file2, header=TRUE, sep=",") 

계산의 예 제 작 과정 :

library(xts) 
file1 <- na.locf(file1) 
file2 <- na.locf(file2) 

그리고 타임 스탬프는 CSV 파일 같은 곳을 CSV로 결과를 저장 :

merg <- merge(x = file1, y = file2, by = "day", all = TRUE) 
write.csv(merge,file='path.csv', row.names=FALSE) 

내가 this 시도 여러 파일을 읽을 수 있습니다. 어떤 아이디어가 어떻게 2 파일에서 n 파일에 대한 프로세스를 만들 수 있습니까?

+0

각'read.csv'의 출력을 목록에 넣으십시오. 각 데이터 프레임에 대해 계산을 수행하려면'* apply' 패밀리를 사용하십시오. 그런 다음 병합에 대한 지침 [here] (http://stackoverflow.com/questions/8091303/merge-multiple-data-frames-in-a-list-simultaneously)을 따르십시오. – Thomas

+0

@ 토마스 :하지만 이들은 data.frames가 아니므로 병합이 훨씬 쉽습니다 :'do.call (merge, xtsList)'. –

+0

@JoshuaUlrich Nice. 나는'file1'과'file2'가 초기 데이터 프레임 모두에 사용되고'na.locf'의 출력을 위해 재사용되는 것을 잘못 읽었습니다. – Thomas

답변

3

데이터가 쉼표로 구분되어 있지만 공백으로 구분하여 표시한다고합니다. 귀하의 데이터가 정말로 쉼표로 분리되어 있다고 가정하겠습니다.

별도의 개체로 읽는 대신 목록으로 읽는 것이 더 쉽습니다. 또한 read.csv 대신 read.zoo을 사용하는 것이 더 쉽습니다. 왜냐하면 xts/zoo 객체를 사용하면 시간을 병합하는 것이 훨씬 쉽기 때문입니다.

# get list of all files (change pattern to match your actual filenames) 
files <- list.files(pattern="file.*csv") 
# loop over each file name and read data into an xts object 
xtsList <- lapply(files, function(f) { 
    d <- as.xts(read.zoo(f, sep=",", header=TRUE, FUN=as.POSIXct)) 
    d <- align.time(d, 15*60) 
    ep <- endpoints(d, "minutes", 15) 
    period.apply(d, ep, mean) 
}) 
# set the list names to the file names 
names(xtsList) <- files 
# merge all the file data into one object, filling in NA with na.locf 
x <- do.call(merge, c(xtsList, fill=na.locf)) 
# write out merged data 
write.zoo(x, "path.csv", sep=",") 
+0

@foxcandy : 패턴이 정확합니다. xtsList <- lapply (files, ...)'에서 사용하는 함수에 계산을 추가하기 만하면됩니다. 병합 이후에 NA.locf를 실행할 때까지 기다려야 할 수도 있습니다. –

+0

@foxcandy : 제 코드가 잘 작동하고 데이터를 사용하지 않습니다. 프레임을 어디서든 사용할 수 있으므로 내 코드에서 as.data.frame'에서 오류를 throw 할 수 없습니다. 내 생각에 함수가 data.frame을 반환하고 내 객체는 xts 객체가 아닙니다. –

관련 문제