使用xts库将毫秒时间序列聚合为秒

时间:2016-10-17 13:25:34

标签: r time-series aggregate-functions xts milliseconds

我需要从100毫秒时间序列聚合1秒时间序列。我在R xts中使用函数to.period(),首先将数据转换为xts格式。 错误是:不支持的类型。

x <- xts(data, order.by = as.POSIXct(data$Time, format = "%H:%M:%S.%ms"))
to.period(x, period = "seconds", k=1)
Error in to.period(x, period = "seconds", k = 1) : unsupported type

当我尝试使用句号=分钟和更高时,会出现相同的错误。

             Date           Time   Price     Amount
<NA> "2014/10/26" "17:30:12.500" "1.268"  "1000000"
<NA> "2014/10/26" "17:33:28.900" "1.268"  "1000000"
<NA> "2014/10/26" "17:33:52.600" "1.268"  "1000000"

Mac OS

这是错误,因为我的数据是毫秒格式还是有其他原因?我该怎么做才能解决错误?

1 个答案:

答案 0 :(得分:3)

您的代码存在一些问题。我建议你花几分钟时间阅读动物园和xts小插曲,以便更好地理解这两个类。

假设您的data看起来像:

data <- structure(list(Date = c("2014/10/26", "2014/10/26", "2014/10/26"),
  Time = c("17:30:12.500", "17:33:28.900", "17:33:52.600"), 
  Price = c(1.268, 1.268, 1.268), Amount = c(1000000L, 1000000L, 1000000L)),
  .Names = c("Date", "Time", "Price", "Amount"), class = "data.frame", 
  row.names = c(NA, -3L))

您对xts构造函数的调用无效。

x <- xts(data, order.by = as.POSIXct(data$Time, format = "%H:%M:%S.%ms"))

data$Time只是一个时间,而不是日期时间,所以as.POSIXct将使用今天的日期。但这不起作用,因为您错误地指定了格式("%ms"不是有效格式,请参阅?strptime),这会导致所有结果值为NA

即使在纠正了这两个问题之后,你的代码仍然无效,因为data包含几种类型的数据(字符(因子?),double,integer),而xts对象是具有索引属性的矩阵,并且你不能在矩阵中混合类型。因此,您需要从xts对象的coredata中排除日期和时间列。您需要正确指定format的{​​{1}}参数。

as.POSIXct

现在x <- xts(data[,c("Price", "Amount")], order.by=as.POSIXct(paste(data$Date, data$Time), format="%Y/%m/%d %H:%M:%OS")) 将起作用:

to.period

如果要将Amount列聚合为volume,则需要在调用to.period(x, "seconds") # x.Open x.High x.Low x.Close # 2014-10-26 17:30:12 1.268 1.268 1.268 1.268 # 2014-10-26 17:33:28 1.268 1.268 1.268 1.268 # 2014-10-26 17:33:52 1.268 1.268 1.268 1.268 之前重命名它。

to.period