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)
这给出了警告:
警告消息:不建议在引导程序上调用
as_tibble()
, 因为这种行为将来可能会改变。采用 改为enframe(name = NULL)
。
但是使用enframe
会导致错误:
enframe(myxts, name = NULL)
错误:
x
的尺寸不得超过一个。length(dim(x))
必须为零或一,而不是2。
我知道timetk
软件包,该软件包具有将xts对象转换为小标题的功能。但是,这个包是孤立的,所以我宁愿避免使用它。
感谢您的反馈。
编辑:
我会对解决这个问题的方法有兴趣:当然可以先将xts
对象转换为任意对象(例如,数据帧),然后转换为小标题。
但是不应该也有直接的方法吗?
答案 0 :(得分:3)
使用fortify.zoo
将其转换为数据帧,然后使用as.tibble
将其转换为小标题。
myxts %>% fortify.zoo %>% as.tibble
给予:
# A tibble: 2 x 3
Index . ..1
<date> <int> <int>
1 2019-02-26 1 3
2 2019-02-27 2 4
答案 1 :(得分:3)
怎么样as_tibble(xts) %>% add_column(day = index(xts), .before = 1, )
答案 2 :(得分:2)
现在可以使用broom::tidy()
函数将xts
对象转换为小对象,并且该函数比ggplot2::fortify()
更为可取,因为根据R,将来可能不推荐使用此函数ggplot2::fortify()的帮助。
library(quantmod)
library(broom)
symbol <- getSymbols("AAPL", src = "yahoo", from = as.Date("2014-01-01"),
to = as.Date("2014-12-31"),auto.assign=FALSE)
symbol_df <- tidy(symbol)
str(symbol_df)
...以及输出:
> str(symbol_df)
tibble [1,506 × 3] (S3: tbl_df/tbl/data.frame)
$ index : Date[1:1506], format: "2014-01-02" "2014-01-02" ...
$ series: chr [1:1506] "AAPL.Open" "AAPL.High" "AAPL.Low" "AAPL.Close" ...
$ value : num [1:1506] 1.98e+01 1.99e+01 1.97e+01 1.98e+01 2.35e+08 ...
答案 3 :(得分:0)
我会选择继续使用 broom::tidy
函数并通过 nest(index, value)
步骤对其进行扩充,以便更好地了解基础数据。请注意,symbol
是 R xts
对象的示例。
library(quantmod)
library(broom)
library(tidyverse)
symbol <- getSymbols("AAPL",
src = "yahoo",
from = as.Date("2014-01-01"),
to = as.Date("2014-12-31"),
auto.assign=FALSE)
symbol_df <- broom::tidy(symbol) %>% nest(index, value)
symbol_df
现在将在单独的小标题中提供时间序列数据可用的每个类别:
# A tibble: 6 x 2
series data
<chr> <list>
1 AAPL.Open <tibble [251 x 2]>
2 AAPL.High <tibble [251 x 2]>
3 AAPL.Low <tibble [251 x 2]>
4 AAPL.Close <tibble [251 x 2]>
5 AAPL.Volume <tibble [251 x 2]>
6 AAPL.Adjusted <tibble [251 x 2]>
此时,如果您要查找对应于 AAPL.Volume
的时间序列数据,接下来的步骤如下:
symbol_df %>%
filter(series == "AAPL.Volume") %>%
pull(data) %>% as.data.frame() %>% as_tibble()
给予
# A tibble: 251 x 2
index value
<date> <dbl>
1 2014-01-02 234684800
2 2014-01-03 392467600
3 2014-01-06 412610800
4 2014-01-07 317209200
5 2014-01-08 258529600
6 2014-01-09 279148800
7 2014-01-10 304976000
8 2014-01-13 378492800
9 2014-01-14 332561600
10 2014-01-15 391638800
# ... with 241 more rows