将 xts 对象的秒设置为 0
set seconds to 0 of xts object
我有一个 xts 对象列表,每个对象都有不同的编号。秒。我应该如何将秒设置为0。这里,我提供一个xts对象
structure(c(6.00001082143504e-18, 6.00001082143504e-18, 6.00001082143504e-18,
6.00001082143504e-18, 6.00001082143504e-18, 6.00001082143504e-18
), .indexCLASS = c("POSIXct", "POSIXt"), .indexTZ = "", tclass = c("POSIXct",
"POSIXt"), tzone = "", class = c("xts", "zoo"), index = structure(c(1438367432,
1438367492, 1438367552, 1438367612, 1438367672, 1438367732), tzone = "", tclass = c("POSIXct",
"POSIXt")), .Dim = c(6L, 1L))
换句话说,我有 xts 对象
2015-08-01 00:00:32 6.000011e-18
2015-08-01 00:01:32 6.000011e-18
2015-08-01 00:02:32 6.000011e-18
我应该如何将秒数设置为 0,这样它就会变成
2015-08-01 00:00:00 6.000011e-18
2015-08-01 00:01:00 6.000011e-18
2015-08-01 00:02:00 6.000011e-18
我们可以使用sub
。我们匹配字符串末尾($
)之前的两位(\d{2}
),并将其替换为'xt2'的index
的00
。由于 return 对象是 character
class,我们可以将其重新转换为 POSIXct
class,然后再将其重新分配为原始对象的 index
.
index(xt2) <- as.POSIXct(sub('\d{2}$', '00', index(xt2)))
将时间戳更改为比观察到的早通常不是一个好主意,因此您应该仔细重新考虑这样做。如果您提供有关您尝试解决的实际问题的更多信息,我可能会帮助您避免做一些具有潜在危险的事情,例如将您的数据更改为在实际发生 之前 发生。
align.time
将(安全地)将时间戳四舍五入到最接近的 n
秒:
> align.time(x, n=60)
[,1]
2015-07-31 13:31:00 6.000011e-18
2015-07-31 13:32:00 6.000011e-18
2015-07-31 13:33:00 6.000011e-18
2015-07-31 13:34:00 6.000011e-18
2015-07-31 13:35:00 6.000011e-18
2015-07-31 13:36:00 6.000011e-18
或者,如果必须,您可以只使用 trunc
一起删除秒数:
> index(x) <- as.POSIXct(trunc(index(x), units="mins"))
> x
[,1]
2015-07-31 13:30:00 6.000011e-18
2015-07-31 13:31:00 6.000011e-18
2015-07-31 13:32:00 6.000011e-18
2015-07-31 13:33:00 6.000011e-18
2015-07-31 13:34:00 6.000011e-18
2015-07-31 13:35:00 6.000011e-18
我有一个 xts 对象列表,每个对象都有不同的编号。秒。我应该如何将秒设置为0。这里,我提供一个xts对象
structure(c(6.00001082143504e-18, 6.00001082143504e-18, 6.00001082143504e-18,
6.00001082143504e-18, 6.00001082143504e-18, 6.00001082143504e-18
), .indexCLASS = c("POSIXct", "POSIXt"), .indexTZ = "", tclass = c("POSIXct",
"POSIXt"), tzone = "", class = c("xts", "zoo"), index = structure(c(1438367432,
1438367492, 1438367552, 1438367612, 1438367672, 1438367732), tzone = "", tclass = c("POSIXct",
"POSIXt")), .Dim = c(6L, 1L))
换句话说,我有 xts 对象
2015-08-01 00:00:32 6.000011e-18
2015-08-01 00:01:32 6.000011e-18
2015-08-01 00:02:32 6.000011e-18
我应该如何将秒数设置为 0,这样它就会变成
2015-08-01 00:00:00 6.000011e-18
2015-08-01 00:01:00 6.000011e-18
2015-08-01 00:02:00 6.000011e-18
我们可以使用sub
。我们匹配字符串末尾($
)之前的两位(\d{2}
),并将其替换为'xt2'的index
的00
。由于 return 对象是 character
class,我们可以将其重新转换为 POSIXct
class,然后再将其重新分配为原始对象的 index
.
index(xt2) <- as.POSIXct(sub('\d{2}$', '00', index(xt2)))
将时间戳更改为比观察到的早通常不是一个好主意,因此您应该仔细重新考虑这样做。如果您提供有关您尝试解决的实际问题的更多信息,我可能会帮助您避免做一些具有潜在危险的事情,例如将您的数据更改为在实际发生 之前 发生。
align.time
将(安全地)将时间戳四舍五入到最接近的 n
秒:
> align.time(x, n=60)
[,1]
2015-07-31 13:31:00 6.000011e-18
2015-07-31 13:32:00 6.000011e-18
2015-07-31 13:33:00 6.000011e-18
2015-07-31 13:34:00 6.000011e-18
2015-07-31 13:35:00 6.000011e-18
2015-07-31 13:36:00 6.000011e-18
或者,如果必须,您可以只使用 trunc
一起删除秒数:
> index(x) <- as.POSIXct(trunc(index(x), units="mins"))
> x
[,1]
2015-07-31 13:30:00 6.000011e-18
2015-07-31 13:31:00 6.000011e-18
2015-07-31 13:32:00 6.000011e-18
2015-07-31 13:33:00 6.000011e-18
2015-07-31 13:34:00 6.000011e-18
2015-07-31 13:35:00 6.000011e-18