将 xts 对象列表写入 excel
write list of xts objects to excel
我有一个包含 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
现在我知道为什么这行不通了,但我想知道一个解决方案,而不是写出一个充满 NA
值的大型数据框,我必须在 [=20] 中删除这些值=].有什么想法吗?
看起来 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")
我推荐第一种方法。将每个交易品种的数据放在一个单独的文件中。
如果您要将 xts 对象列表读入 Excel,您可能需要将其转换为平面文件。下面的代码将每个 xts
对象转换为一个数据框,每行包含 xts
对象名称及其日期和值。 tidyverse
中 purrr
包中的 map_dfr
函数用于循环遍历列表中的 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
这里的数据是我做的一个简单的例子集。
我有一个包含 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
现在我知道为什么这行不通了,但我想知道一个解决方案,而不是写出一个充满 NA
值的大型数据框,我必须在 [=20] 中删除这些值=].有什么想法吗?
看起来 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")
我推荐第一种方法。将每个交易品种的数据放在一个单独的文件中。
如果您要将 xts 对象列表读入 Excel,您可能需要将其转换为平面文件。下面的代码将每个 xts
对象转换为一个数据框,每行包含 xts
对象名称及其日期和值。 tidyverse
中 purrr
包中的 map_dfr
函数用于循环遍历列表中的 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
这里的数据是我做的一个简单的例子集。