質問

私のテーブルの1つがタイムスタンプに複数の値を持ち、もう1つだけが複数の値で単一のアイテムの値を繰り返すことができますか?

例えば:

XTS_A:

2011/01/01 10:00:00,Bar
2011/01/01 10:00:01,Baz

XTS_B:

2011/01/01 10:00:00,A
2011/01/01 10:00:00,B
2011/01/01 10:00:00,C
2011/01/01 10:00:01,B

merge_result:

2011/01/01 10:00:00,A,Bar
2011/01/01 10:00:00,B,Bar
2011/01/01 10:00:00,C,Bar
2011/01/01 10:00:01,B,Baz

再現可能な例:

library(zoo)
library(xts)
XTS_A <- structure(c("Bar", "Baz"), .Dim = c(2L, 1L), index = structure(c(1293894000, 1293894001), tzone = "", tclass = c("POSIXt", "POSIXct")), class = c("xts",  "zoo"), .indexCLASS = c("POSIXt", "POSIXct"), .indexTZ = "")
XTS_B <- structure(c("A", "B", "C", "B"), .Dim = c(4L, 1L), index = structure(c(1293894000,  1293894000, 1293894000, 1293894001), tzone = "", tclass = c("POSIXt",  "POSIXct")), class = c("xts", "zoo"), .indexCLASS = c("POSIXt",  "POSIXct"), .indexTZ = "")
役に立ちましたか?

解決

後で記入するだけではどうですか?やや醜い例(ループを使用しますが、このような順次依存関係では回避するのは難しいです):

mrg <- merge(XTS_A,XTS_B)
for(r in seq(nrow(mrg)) ) {
  if(is.na(mrg[r,1])) {
    mrg[r,1] <- mrg[r-1,1] 
  }
}

> mrg
                    XTS_A XTS_B
2011-01-01 16:00:00 "Bar" "A"  
2011-01-01 16:00:00 "Bar" "B"  
2011-01-01 16:00:00 "Bar" "C"  
2011-01-01 16:00:01 "Baz" "B"

Joranの提案は、動物園パッケージのフィルダウン機能を使用してタイピングを保存します。

mrg[,1] <- na.locf(as.vector(mrg$XTS_A))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top