3

このコードを使用して read.zoo で複数の CSV ファイルを読み取ろうとしましたが、問題が発生しました。向きが違うので使ってみfile.path()ました。問題は、元のファイルへの Date.Time に Dateがあり、関数の前または内部format= "%m/%d %HH:%MM:%SS"に追加する必要があることです。どうすればこれを行うことができますか? サブ関数を使用しようとしましたが、引数が必要です。どれの?この問題を回避することは可能ですか?"%Y/"read.zoo()

library(zoo)
for(i in Dir1){
   filepath <- file.path(paste(i,".csv",sep=""))
   #f<-function(x) sub("([[:print:]]{15})$", "2005/\\1",x)
   dat<-read.zoo(filepath,header=TRUE,sep=",",
                 FUN = function(x) sub("([[:print:]]{15})$", "2005/\\1"))
   filenames <- substr(filepath,122,155)
   names <-substr(filenames,1,21)
   assign(names, dat)
}

   Some of my data:
   Date.time,Outdoor Dry Bulb [C],Outdoor Relative Humidity [%],Air Temperature [C],Surface Temperature [C]
   01/01  00:03:00,0.0,50.,23.,16.3588068633603
   01/01  00:06:00,0.0,50.,23.,16.1696661072302
   01/01  00:09:00,0.0,50.,23.,13.8864861630478 
   01/01  00:12:00,0.0,50.,23.,13.006618496734
   01/01  00:15:00,0.0,50.,23.,12.5542552024807 
   01/01  00:18:00,0.0,50.,23.,11.6201669301972
4

1 に答える 1

3

paste()ここでは過剰な正規表現を使用するのではなく、R の観点と文字列を一緒に考えたいと思います。例えば::

f <- function(x, format) {
    as.POSIXct(paste0("2005/", as.character(x)), format = format)
}

次に、次のように呼び出します。

read.zoo(filepath, format = "%Y/%m/%d %H:%M:%S", header=TRUE,
         sep=",", FUN = f)

の説明f()

を説明するために、 は読み込まれたファイルから列を渡すことf()に注意してください。これは、ファイルからのデータを含む文字ベクトルまたは (使用する設定に応じて) 因子になります。したがって、 (からのデータを参照するために使用するもの) を介して文字を強制することができます。次に、ファイルの列のデータに文字列を貼り付けます。私はこれを必要に応じて使用していますが、これはそれを行うための高速な方法です。read.zoo()FUNindex.columnas.character(x)xindex.column"2005/"index.columnxpaste0()paste(...., sep = "")

最後の段階は、結果の文字ベクトルを R の適切な DateTime クラスに変換することです。私はこれを使用as.POSIXct()します。引数が に渡されることをread.zoo()保証して、を使用できるようにし、それを関数の引数に渡して、渡す日時情報の構造を理解できるようにします。formatFUNf()formatas.POSIXct()

使用例

次に例を示します。

set.seed(1)
dat <- data.frame(Index = seq(Sys.time(), by = "2 hours", length = 50),
                  Data  = rnorm(50))
dat <- transform(dat, Index = strftime(Index, format = "%m/%d %H:%M:%S"))
head(dat)

> head(dat)
           Index       Data
1 10/17 12:53:35 -0.6264538
2 10/17 14:53:35  0.1836433
3 10/17 16:53:35 -0.8356286
4 10/17 18:53:35  1.5952808
5 10/17 20:53:35  0.3295078
6 10/17 22:53:35 -0.8204684

## write to file
write.csv(dat, file = "mydata.csv", row.names = FALSE)

mydata.csvこれがデータ ファイルであると仮定し、read.zoo()上記の関数とユーザー関数を使用して読み込みfます。

myzoo <- read.zoo("mydata.csv", format = "%Y/%m/%d %H:%M:%S",
                  header = TRUE, sep = ",", FUN = f)
head(myzoo)

与える:

> head(myzoo)
2005-10-17 12:53:35 2005-10-17 14:53:35 2005-10-17 16:53:35 2005-10-17 18:53:35 
         -0.6264538           0.1836433          -0.8356286           1.5952808 
2005-10-17 20:53:35 2005-10-17 22:53:35 
          0.3295078          -0.8204684
于 2012-10-17T12:08:01.293 に答える