【问题标题】:I cannot get xts to recognize Time Series in rownames我无法让 xts 识别行名中的时间序列
【发布时间】:2015-04-23 20:49:03
【问题描述】:

我的 xts 包有问题。我正在尝试从数据框创建 xts。为简单起见,我尝试在下面的小 df 上复制我正在尝试做的事情:

> df <- japanTOPIX[,1, drop = FALSE]
> typeof(df[,1])
[1] "double"
> typeof(rownames(df))
[1] "character"
> head(df, 3)
           X7164.JT.Equity
12/27/2000            65.0
12/28/2000            66.5
12/29/2000            66.2
> head(as.Date(rownames(df), format = "%m/%d/%Y"),3)
[1] "2000-12-27" "2000-12-28" "2000-12-29"
> timeBased(as.Date(rownames(df), format = "%m/%d/%Y"))
[1] TRUE
> xts(df, by = as.Date(rownames(df), format = "%m/%d/%Y"))
Error in xts(df, by = as.Date(rownames(df), format = "%m/%d/%Y")) : 
  order.by requires an appropriate time-based object
> head(strptime(rownames(df), format = "%m/%d/%Y"),3)
[1] "2000-12-27 EST" "2000-12-28 EST" "2000-12-29 EST"
> timeBased(strptime(rownames(df), format = "%m/%d/%Y"))
[1] TRUE
> xts(df, by = strptime(rownames(df), format = "%m/%d/%Y"))
Error in xts(df, by = strptime(rownames(df), format = "%m/%d/%Y")) : 
  order.by requires an appropriate time-based object
> head(as.POSIXlt(rownames(df), format = "%m/%d/%Y"),3)
[1] "2000-12-27 EST" "2000-12-28 EST" "2000-12-29 EST"
> timeBased(as.POSIXlt(rownames(df), format = "%m/%d/%Y"))
[1] TRUE
> xts(df, by = as.POSIXlt(rownames(df), format = "%m/%d/%Y"))
Error in xts(df, by = as.POSIXlt(rownames(df), format = "%m/%d/%Y")) : 
  order.by requires an appropriate time-based object
> head(as.POSIXct(rownames(df), format = "%m/%d/%Y"),3)
[1] "2000-12-27 EST" "2000-12-28 EST" "2000-12-29 EST"
> timeBased(as.POSIXct(rownames(df), format = "%m/%d/%Y"))
[1] TRUE
> xts(df, by = as.POSIXct(rownames(df), format = "%m/%d/%Y"))
Error in xts(df, by = as.POSIXct(rownames(df), format = "%m/%d/%Y")) : 
  order.by requires an appropriate time-based object

如您所见,每次尝试创建此 xts 时都会出错。该包声称我不是按基于时间的对象排序,但“by =”变量实际上是基于时间的。有什么帮助吗?? (如果示例或代码不清楚,请告诉我,我会尽力澄清。)

编辑:我认为这可能与行名中的一些非唯一值有关,但事实并非如此:

> nrow(df)
[1] 5115
> length(unique(rownames(df)))
[1] 5115

【问题讨论】:

  • 格式字符串错误。使用 '-' ... 或者什么都不用。
  • @BondedDust 嗨,保税。他的数据格式为12/27/2000 ,您可以在head(df, 3) 中看到。如果我没记错的话,使用- 会产生&lt;NA&gt;s。

标签: r datetime xts


【解决方案1】:

您错误地使用了xts 函数。第二个参数应该是order.by 而不是by。使用您的数据查看以下示例:

数据:

df <- read.table(text='
           X7164.JT.Equity
12/27/2000            65.0
12/28/2000            66.5
12/29/2000            66.2')

解决方案:

> xts(df, order.by = as.Date(rownames(df), format = "%m/%d/%Y"))
           X7164.JT.Equity
2000-12-27            65.0
2000-12-28            66.5
2000-12-29            66.2

如您所见,它按预期工作!

附:您也可以使用as.POSIXctas.POSIXltstrptime 而不是as.Date。它们都正常工作!

【讨论】:

  • 哇。每次。我是一个白痴。感谢您指出这一点!
  • 别担心。它已经发生在我们所有人身上很多次了:P。我们都需要不时的调试帮助。很高兴我能帮上忙:)
猜你喜欢
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2014-01-21
  • 2013-03-03
  • 2021-10-28
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多