首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我无法让xts识别行名中的时间序列

我无法让xts识别行名中的时间序列
EN

Stack Overflow用户
提问于 2015-04-23 20:49:03
回答 1查看 437关注 0票数 1

我的xts包有问题。我正在尝试从dataframe创建一个xts。为了简单起见,我尝试在下面的一个小df上复制我想要做的事情:

代码语言:javascript
复制
> 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 =‘变量实际上是基于时间的。有什么帮助吗?(如果示例或代码不清楚,请告诉我,我将尽力澄清。)

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

代码语言:javascript
复制
> nrow(df)
[1] 5115
> length(unique(rownames(df)))
[1] 5115
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-23 21:36:02

您使用的xts函数不正确。第二个论点应该是order.by而不是by。请参阅下面的数据示例:

数据:

代码语言:javascript
复制
df <- read.table(text='
           X7164.JT.Equity
12/27/2000            65.0
12/28/2000            66.5
12/29/2000            66.2')

解决方案:

代码语言:javascript
复制
> 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.Date,还可以使用as.POSIXctas.POSIXltstrptime。他们都正常工作!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29834033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档