将数据帧转换为xts

use*_*446 47 r time-series coerce dataframe xts

我正在尝试使用as.xts()方法将数据帧转换为xts对象.这是我的输入数据帧q:

q
                      t x  
1  2006-01-01 00:00:00  1  
2  2006-01-01 01:00:00  2  
3  2006-01-01 02:00:00  3

str(q)
    'data.frame':   10 obs. of  2 variables:
 $ t: POSIXct, format: "2006-01-01 00:00:00" "2006-01-01 01:00:00" "2006-01-01 02:00:00" "2006-01-01 03:00:00" ...  
 $ x: int  1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

结果是:

> as.xts(q)
Error in as.POSIXlt.character(x, tz, ...) : 
  character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)

这是我能想到的最简单的例子,所以没有让它工作是非常令人沮丧的......任何帮助都表示赞赏!

Dir*_*tel 75

这是清楚地记录--- XTS动物园的目的是通过提供形成2个参数,一个vectormatrix携带数据和Date,POSIXct,chron,...类型供给时间信息(或在的情况下,动物园的排序).

所以做点什么

 qxts <- xts(q[,-1], order.by=q[,1])
Run Code Online (Sandbox Code Playgroud)

你应该被设定.

  • 考虑到'xts:可扩展时间序列'论文明确声称可以从data.frame转换,我认为这一点都不明显. (23认同)
  • 把我当作另一个不认为实际上"清楚记录"的人.但是由于这个答案,我设法找出与原始问题无关的其他内容. (10认同)
  • @DamienB(以及其他评论者和选民),我们非常乐意接受使文档更清晰和/或更少迷宫的贡献/补丁.关于OSS的好处是,你可以有所作为_(但是表达你的意见,没有行动,不计算在内). (4认同)
  • @DamienB:我"@"编辑你,因为你是最近的,你只能在评论中"@"一个人(这很糟糕).我很高兴与贡献者一起帮助他们理解,但我无法对需要澄清的内容有所了解.诚实的尝试,无论多么不完美,都非常受欢迎(例如,请参阅由SO问询者撰写的关于R-Forge的xts常见问题解答). (4认同)
  • 谢谢!你帮了我很多,虽然答案很简单!(这对我来说并不明显,因为我之前没有使用过任何时间序列包,并且不知道从文档中得到了什么).但是,再次感谢! (3认同)
  • 我真的不确定"清楚记录"可以在这里应用.很明显,xts文档是一个迷宫. (3认同)
  • @DamienB:我从来没有说过它有明确记录.我只是说那些_did不理解_并且_did没有找到文档清楚的人,但是_now理解_可以帮助使文档清晰.否则,你要我_imagine_一个"学习者的心态",以便编写更好的文档.您对"文档是迷宫"的评论以及您的讲授都没有用. (3认同)
  • @JoshuaUlrich请不要“ OSS”我们,我们在这里所做的区别是,我们告诉Dirk不,您初次使用xts时“明确记录”并不适用,因为这是第一次使用,而且文档不可读,我们不知道如何使它更容易接近。可以为文档做出贡献的人是已经了解并且能够回到他/她的“学习者心态”的人。如果我们在这里对“如此基础的”东西发表评论,那么我们显然还没有达到这个水平,您的演讲肯定不会对此有所帮助。 (2认同)

Dr *_*r G 20

好吧,as.xts默认假设日期存储在data.frame的rownames中.因此错误消息.快速而肮脏的修复方法是:

rownames(q) = q[1]
as.xts(q)
Run Code Online (Sandbox Code Playgroud)

但是你得到一个带有日期字符串的额外列.理想情况下,您将构建data.frame,并将日期作为rownames开头.

  • 可能应该是:`rownames(q)= q [[1]]` (3认同)
  • @Ahmedov`q [1]`是包含向量的列表。q [[1]]只是向量。如果`[&lt;-。rownames`接受列表,可能不会有所不同,但是即使接受,也不是所有类特定的赋值函数都接受。 (2认同)

Mat*_*cho 6

这是使用tidyquant包的解决方案,其中包含一个as_xts()将数据帧强制转换为xts对象的函数.它还包含as_tibble()将xts对象强制转换为tibbles("整洁"数据帧).

重新创建数据框(请注意,日期时间类用于"整洁"数据框,但可以使用任何明确的日期或日期时间类):

> q
# A tibble: 3 × 2
                    t     x
               <dttm> <dbl>
1 2006-01-01 00:00:00     1
2 2006-01-01 01:00:00     2
3 2006-01-01 02:00:00     3
Run Code Online (Sandbox Code Playgroud)

使用as_xts()转换到"XTS"级.指定参数,, date_col = t以将"t"列指定为用作行名称的日期:

> library(tidyquant)
> as_xts(q, date_col = t)
                    x
2006-01-01 00:00:00 1
2006-01-01 01:00:00 2
2006-01-01 02:00:00 3
Run Code Online (Sandbox Code Playgroud)

返回是一个xts具有正确日期或日期时间作为行名称的对象.

  • 此功能现已弃用.使用timetk :: tk_xts代替https://www.rdocumentation.org/packages/tidyquant/versions/0.5.3/topics/as_xts (4认同)