0

次の xts オブジェクトがあります。

options("digits.secs" = 1)
ex <- structure(c(NA, -63L, NA, NA, NA, NA, NA, 0L, NA, NA, NA, NA, 
NA, 1L, NA, NA, NA, NA), .Dim = c(6L, 3L), .Dimnames = list(NULL, 
    c("V2", "V3", "V4")), index = structure(c(1366088402.46, 
1366088402.46, 1366088402.463, 1366088402.463, 1366088469.697, 
1366088469.697), tzone = "", tclass = c("POSIXct", "POSIXt")),
class = c("xts", "zoo"), .indexCLASS = c("POSIXct", "POSIXt"),
tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "")
ex <- make.index.unique(ex, drop = TRUE, fromLast = TRUE)

ただし、結果の xts オブジェクトには一意のインデックスがありません。また、すべての値を返すstrptimewithを使用してみました。上記のコードは、出力オプションを使用して日付を切り捨てようとしているため、直感的には意味がありません。format="...%OS1"NA

他の人が小数のタイムスタンプをどのように処理しているかを調べましたが、ほとんどの結果は上記と一致しているようです。なぜ%OS1私のために働いていないoptionsのですか?これを処理する正しい方法は本当にありますか? options("digits.secs")時間インデックスを指定された増分で内部的に切り捨てたいのですが、何か新しいものに設定するたびにインデックスが変更されるべきではありません。

> options("digits.secs"=3)
> head(ex)
                         V2 V3 V4
2013-04-16 00:00:02.460  NA NA NA
2013-04-16 00:00:02.460 -63  0  1
2013-04-16 00:00:02.463  NA NA NA
2013-04-16 00:00:02.463  NA NA NA
2013-04-16 00:01:09.697  NA NA NA
2013-04-16 00:01:09.697  NA NA NA
> ex <- align.time(ex, n = 0.1)
> head(ex)
                       V2 V3 V4
2013-04-16 00:00:02.5  NA NA NA
2013-04-16 00:00:02.5 -63  0  1
2013-04-16 00:00:02.5  NA NA NA
2013-04-16 00:00:02.5  NA NA NA
2013-04-16 00:01:09.7  NA NA NA
2013-04-16 00:01:09.7  NA NA NA
> ex <- make.index.unique(ex, drop = TRUE, fromLast = TRUE)
> head(ex)
                         V2     V3   V4
2013-04-16 00:00:02.5    NA     NA   NA
2013-04-16 00:01:09.7    NA     NA   NA
2013-04-16 00:01:09.7 -65.5  -7500 0.25
2013-04-16 00:01:13.5 -64.0  -7500 0.25
2013-04-16 00:01:15.4 -64.0 -10000 0.20
2013-04-16 00:01:24.9 -64.0 -10000 0.20

ご覧のとおり、データの長さは約 3 分の 1 に削減されていますが、最初の数行でも 00:01:09.7 に時間インデックスが繰り返されています。

4

2 に答える 2

0

インデックス値を一意にするだけでなく、実際にデータを集計したいようです。各列を合計したい場合、これは機能します。それをしたくない場合は、各列に必要な機能を別の関数に置き換えてください。

library(xts)
ex <- structure(c(NA, -63L, NA, NA, NA, NA, NA, 0L, NA, NA, NA, NA, 
NA, 1L, NA, NA, NA, NA), .Dim = c(6L, 3L), .Dimnames = list(NULL, 
    c("V2", "V3", "V4")), index = structure(c(1366088402.46, 
1366088402.46, 1366088402.463, 1366088402.463, 1366088469.697, 
1366088469.697), tzone = "", tclass = c("POSIXct", "POSIXt")),
class = c("xts", "zoo"), .indexCLASS = c("POSIXct", "POSIXt"),
tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "")

options(digits.secs=6)

# endpoints() doesn't support sub-second resolution on Windows,
# so do what it does using only R code.
ep <- c(0,which(diff(.index(ex)%/%0.1%/%1+1) != 0),NROW(ex))
x <- period.apply(ex, ep, colSums, na.rm=TRUE)
x <- align.time(x, 0.1)
于 2013-05-14T20:04:59.723 に答える