将xts对象列表写入excel

时间:2018-06-27 15:49:34

标签: r list time-series xts zoo

我有一个337个XTS对象的列表,如下所示:

> head(blowup.instances)
$`AERI.US.Equity`
           AERI.US.Equity
2015-04-24     -0.6363379

$SRPT.US.Equity
           SRPT.US.Equity
2013-11-12     -0.6400985
2016-01-15     -0.5485299

$PTCT.US.Equity
           PTCT.US.Equity
2016-02-23      -0.616419

当我尝试将它们写入csv时,它不起作用:

> write.csv(blowup.instances, "blowupInstances.csv")
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : 
  arguments imply differing number of rows: 1, 2, 3, 7, 4, 9, 5, 6, 18, 37, 8, 10, 78, 25, 11, 12, 20, 59, 17, 19, 27, 29, 16, 14, 31, 15, 51, 28, 54

现在,我知道为什么它不起作用,但是除了写出必须在Excel中删除的NA值的大型数据框外,我想知道一种解决方案。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

看起来blowup.instances是一个列表。不要将列表写入文件。

假设是这种情况,您可以执行以下任一操作:

syms <- names(blowup.instances)

lapply(syms, FUN = function(sym) {
  write.zoo(x = blowup.instances[[sym]], file = paste0(sym, "-data.csv"))
})

或者:

res <- do.call(cbind, blowup.instances)
write.zoo(res, file = "crosssecdata.csv")

我建议第一种方法。将每个符号的数据放在单独的文件中。

答案 1 :(得分:1)

如果要在Excel中读取xts对象列表,则可能需要将其转换为平面文件。下面的代码将每个xts对象转换为一个数据帧,每行包含xts对象名称及其日期和值。 map_dfrpurrr包中的tidyverse函数用于遍历列表中的xts个对象,并将结果组合成一个数据帧。

library(xts) 
 library(tidyverse)
#
#  combine list of xts objects into a single data frame with equity names and dates
# 

  df_out <- map_dfr(blowup.instances, function(y) data_frame(Name = names(y), Date = index(y), value=as.vector(coredata(y))) )
#
#   write as csv flat file
#
  write.csv(df_out, file="blowupInstances.csv", row.names = FALSE)

写入文件的数据帧是

df_out
# A tibble: 4 x 3
  Name           Date       value
  <chr>          <date>     <dbl>
1 AERI.US.Equity 2018-06-27 -0.5 
2 SRPT.US.Equity 2018-06-26 -0.64
3 SRPT.US.Equity 2018-06-27 -0.55
4 PTCT.US.Equity 2018-06-20 -0.7 

我在其中创建一个简单示例数据的地方。