2

異なる名前の異なる csv ファイルがあります。いくつかの計算を行い、その後、結果を 1 つの csv ファイルに保存したいと考えています。

2 つの csv ファイルのデータの形式は次のとおりです。

ファイル 1:

 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)

複数のファイルを読み取るために、これを試しました。2つのファイルからn個のファイルのプロセスを作成する方法はありますか?

4

1 に答える 1

3

データはカンマで区切られていると言いますが、スペースで区切られて表示されます。あなたのデータは本当にコンマで区切られていると仮定します。

それらを個別のオブジェクトに読み取るよりも、リストに読み取る方が簡単です。xts/zoo オブジェクトを使用すると時系列のマージがはるかに簡単になるため、read.zoo代わりに使用するのも簡単です。read.csv

# 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=",")
于 2013-07-27T14:01:01.590 に答える