将 xts 转换为 tibble 的最佳方法是什么

Cet*_*ttt 3 r xts tibble

从 tibble 包版本 2.0.1 开始,将 xts 对象转换为 tibble 的最佳方法是什么?考虑下面的例子

library(tibble)
library(xts)

myxts <- xts(matrix(1:4, 2, 2), order.by = seq.Date(from = as.Date("2019-02-26"), length.out = 2, by = "d"))

as_tibble(myxts)
Run Code Online (Sandbox Code Playgroud)

这给出了警告:

警告信息:as_tibble()不鼓励调用引导程序,因为该行为将来可能会发生变化。使用 enframe(name = NULL)来代替。

但是使用会enframe导致错误:

enframe(myxts, name = NULL)
Run Code Online (Sandbox Code Playgroud)

错误:x不能超过一维。length(dim(x)) 必须为零或一,而不是 2。

我知道该timetk包具有将 xts 对象转换为 tibbles 的功能。但是,这个包是孤立的,所以我宁愿避免它。

感谢您的反馈。

编辑: 我会对这个问题的 tidyverse 解决方案感兴趣:当然,可以先将xts对象转换为任意对象(例如数据帧),然后再转换为 tibble。但是不应该也有直接的方法吗?

EDIT2: 从 tibble 包版本 3.0.3 开始,警告不再出现。特别是可以使用 Yakov-vc 的答案中的那一行来进行“整洁”的转换。

G. *_*eck 6

使用fortify.zoo将其转换为数据帧,然后as.tibble将其转换为一个tibble。

myxts %>% fortify.zoo %>% as.tibble
Run Code Online (Sandbox Code Playgroud)

给予:

# A tibble: 2 x 3
  Index          .   ..1
  <date>     <int> <int>
1 2019-02-26     1     3
2 2019-02-27     2     4
Run Code Online (Sandbox Code Playgroud)

更新

由于 tibble 包中的更改,如果 myxts 没有名称(或具有 tibble 不喜欢的名称),则上述内容不再有效,因此请改用:

myxts %>% fortify.zoo %>% as_tibble(.name_repair = "minimal")
Run Code Online (Sandbox Code Playgroud)

建议使用 broom::tidy 的另外两个答案,尽管这适用于某些 xts 对象,但在与问题中的 myxts 对象一起使用时会生成错误消息。还有一个答案说,从 ggplot2 中删除 fortify 可能会导致问题,但如果我们直接调用 fortify.zoo,就像我们在上面的代码行中所做的那样,这段代码将继续工作。

2021 年 3 月 30 日。刚刚使用 tibble 3.1.0 重新审视了这一点,现在以下确实运行而不会产生错误或警告;但是,缺少索引,因此使用 fortify.zoo 的上述方法仍然是转换的最佳方式。

as_tibble(myxts)  # index missing
Run Code Online (Sandbox Code Playgroud)


小智 5

怎么样as_tibble(xts) %>% add_column(day = index(xts), .before = 1)