【发布时间】:2013-05-13 21:45:55
【问题描述】:
我有以下 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 对象没有唯一索引。我还尝试将strptime 与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
如您所见,我的数据长度已减少到大约三分之一,但即使在前几行中,在 00:01:09.7 也有重复的时间索引。
【问题讨论】:
-
是什么让您知道结果索引不是唯一的?您是否将它们打印出来并进行视觉比较,您是否使用
anyDuplicated(.)、length(unique(.))。你的数据是什么样的?如果您发现了其他相关问题,是否值得链接到它们? -
请将
dput(head(data))的输出添加到您的问题中。 -
不幸的是,这并没有帮助,因为我没有尝试附加小数位来创建更高分辨率的时间戳。我的数据时间戳到最近的 nano,我试图在这里放弃分辨率,现在我想要的只是 1/10 秒,只是为了确认我可以获得唯一的时间戳。 Ricardo,我已经打印到控制台并在视觉上检测到非唯一索引,但是 anyDuplicated(index(data)) 返回 0 和 length(unique(index(data) == length(index(data))。我的数据都是数字的,感谢你们迄今为止的帮助。
-
options("digits.secs")不会更改索引值。它只会改变它们的显示方式。make.index.unique(..., drop=TRUE)只会删除具有完全相同索引值的行。您似乎希望将数据聚合为 0.1 秒的增量,但很难确定,因为您没有提供对象、当前输出和预期输出的可重现示例。