0

次の例を検討してください。

Date1 = seq(from = as.POSIXct("2010-05-03 00:00"), 
            to = as.POSIXct("2010-06-20 23:00"), by = 120)
Dat1 <- data.frame(DateTime = Date1,
                   x1 = rnorm(length(Date1)))

Date2 <- seq(from = as.POSIXct("2010-05-01 03:30"), 
             to = as.POSIXct("2010-07-03 22:00"), by = 120)
Dat2 <- data.frame(DateTime = Date2,
                   x1 = rnorm(length(Date2)))

Date3 <- seq(from = as.POSIXct("2010-06-08 01:30"), 
             to = as.POSIXct("2010-07-13 11:00"), by = 120)
Dat3Matrix <- matrix(data = rnorm(length(Date3)*3), ncol = 3)

Dat3 <- data.frame(DateTime = Date3,
                   x1 = Dat3Matrix)

list1 <- list(Dat1,Dat2,Dat3)

ここでは、例として 3 つの data.frames を作成し、それらをすべてリストに配置します。ここから、3 つのデータ フレームを返すが、他のそれぞれに存在する時間のみを保持するルーチンを作成したいと思います。つまり、3 つのデータ フレームすべてを、すべてのデータ フレームで一貫した時間に短縮する必要があります。これはどのように行うことができますか?

4

3 に答える 3

1

zoo多方向マージがあります。このラップリーは、それぞれをzooクラス read.zooに変換するコンポーネントを超えています。結果の日付/時刻に POSIXct を使用するように指示します。次に、 を使用して変換されたコンポーネントをマージし、交差する時間のみが保持されるようにします。list1tz=""all=FALSE

library(zoo)
z <- do.call("merge", c(lapply(setNames(list1, 1:3), read.zoo, tz = ""), all = FALSE))

z後でdata.frameに変換したい場合は試してみてくださいdd <- cbind(Time = time(z), coredata(z))。ただし、以降の処理が単純化されるように、zoo オブジェクトとして保持する (または xts オブジェクトに変換する) 方がよい場合があります。

于 2013-05-05T17:30:04.173 に答える
0

1 つのアプローチは、それぞれのインデックスを見つけて、それに応じてサブセット化することです。

idx1 <- (Dat1[,1] %in% Dat2[,1]) & (Dat1[,1] %in% Dat3[,1])
idx2 <- (Dat2[,1] %in% Dat1[,1]) & (Dat2[,1] %in% Dat3[,1])
idx3 <- (Dat3[,1] %in% Dat1[,1]) & (Dat3[,1] %in% Dat2[,1])

Dat1[idx1,]Dat2[idx2,]Dat3[idx3,]は望ましい結果を与えるはずです。

于 2013-05-05T15:33:36.760 に答える