3

まず、見てみたところ、これはタイムゾーンに関連する問題であることに気づき、解決したようですが、なぜそれが起こったのか?xtsわかりません。つまり、価格データの単純なデータフレームがあります。オブジェクトに変換すると、オブジェクトの最初の日付はデータフレームの最初の日付より1日早くなります。タイムゾーンを指定すると、日付の一致の問題が解消されます。最初は、TZが指定されていない日付がUMTであると想定し、「JST」を与えてくれるのではないかと思いましたが、なぜそれが丸一日前の日付になるのかわかりません…?xtsxtsxts()order.bySys.timezone()

Q.なぜこれが起こっているのですか?

require(xts)
aa <- structure(list(Date = structure(c(6822, 6823, 6824, 6825, 6826,
6829), class = "Date"), Open = c(2145, 2126, 2130, 2148, 2144,
2137), High = c(2148, 2131, 2141, 2152, 2146, 2151), Low = c(2124,
2111, 2128, 2140, 2135, 2136), Close = c(2124, 2120, 2141, 2140,
2140, 2149), Volume = c(0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("Date",
"Open", "High", "Low", "Close", "Volume"), row.names = c(NA,
6L), class = "data.frame")

str(aa)
aa

bb <- xts(aa[5], order.by = aa$Date)
str(bb)
bb ## first date is a day earlier than the first day of the data frame

bb <- xts(aa[5], order.by = aa$Date, tzone = Sys.getenv("TZ"))
str(bb)
bb ## first dates in xts object and data frame match...

これはオンです:

sessionInfo():
R version 2.15.1 (2012-06-22)

Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252
[2] LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] gridExtra_0.9.1 scales_0.2.2    plyr_1.7.1      ggplot2_0.9.2.1
 [5] lubridate_1.2.0 quantmod_0.3-17 TTR_0.21-1      xts_0.8-8      
 [9] zoo_1.7-9       Defaults_1.1-1 

loaded via a namespace (and not attached):
 [1] colorspace_1.2-0   dichromat_1.2-4    digest_0.5.2       gtable_0.1.1      
 [5] labeling_0.1       lattice_0.20-10    MASS_7.3-22        memoise_0.1       
 [9] munsell_0.4        proto_0.3-9.2      RColorBrewer_1.0-5 reshape2_1.2.1    
[13] stringr_0.6.1     

4

1 に答える 1

4

私にはわかりませんし、あなたの問題を正確に再現することはできませんが、それはDate強制されPOSIXctたり戻ったりすることに関係していると思います。

この行は、xts関数のコードに含まれています。

if (inherits(order.by, "Date") && !missing(tzone)) 
    order.by <- .POSIXct(unclass(order.by) * 86400, tz = tzone)

最初の呼び出しで、tzoneが欠落しているため、このコードは実行されません。2回目の呼び出しでは、でtzoneはないmissingので、実行されます。

xts.Rのコードをステップスルーすると、(の場合)intzoneが に強制変換されていることがわかります。missingDatesaa$DatePOSIXct

index <- as.numeric(as.POSIXct(order.by))

as.Date.POSIXct問題はデフォルトがであるということだと思うtz="UTC"ので、別のものを指定しない限りそれが使用されます。

x <- structure(1290125760, 
               tzone = structure("America/Chicago", .Names = "TZ"), 
               tclass = c("POSIXt", "POSIXct"), 
               class = c("POSIXct", "POSIXt"))
x
#[1] "2010-11-18 18:16:00 CST"
str(x)
#POSIXct[1:1], format: "2010-11-18 18:16:00"
as.Date(x)
#[1] "2010-11-19"
as.Date(x, origin=as.Date("1970-01-01"), tz="America/Chicago")
#[1] "2010-11-18"
于 2012-11-18T16:10:04.847 に答える