首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并R中不同XTS对象的多个列表

合并R中不同XTS对象的多个列表
EN

Stack Overflow用户
提问于 2021-12-25 18:16:56
回答 2查看 56关注 0票数 2

我有3个大型XTS对象列表:“SMA”、"L“、"Marubozu”。快速查看它的外观:

代码语言:javascript
复制
> names(Marubozu)
 [1] "TSLA"  "AAPL"  "NTES"  "GOOGL" "ASML"  "GOOG"  "NFLX"  "ADBE"  "AMZN"  "MSFT"  "ADI"   "FB"   
> names(SMA)
 [1] "TSLA"  "AAPL"  "NTES"  "GOOGL" "ASML"  "GOOG"  "NFLX"  "ADBE"  "AMZN"  "MSFT"  "ADI"   "FB"   
> names(L)
 [1] "TSLA"  "AAPL"  "NTES"  "GOOGL" "ASML"  "GOOG"  "NFLX"  "ADBE"  "AMZN"  "MSFT"  "ADI"   "FB"

> head(Marubozu$AAPL, n = 2)
           WhiteMarubozu BlackMarubozu
2000-01-03         FALSE         FALSE
2000-01-04         FALSE         FALSE
> head(SMA$AAPL, n = 2)
           UpTrend NoTrend DownTrend Trend
2000-01-03      NA      NA        NA    NA
2000-01-04      NA      NA        NA    NA
> head(L$AAPL, n =2)
           AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2000-01-03  0.936384  1.004464 0.907924   0.999442   535796800      0.856887
2000-01-04  0.966518  0.987723 0.903460   0.915179   512377600      0.784643   

我希望合并该列表中相应的XTS对象,以便创建一个大的lig列表。例如,New_List$AAPL的输出是:

代码语言:javascript
复制
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted WhiteMarubozu BlackMarubozu UpTrend NoTrend DownTrend Trend
2000-01-03  0.936384  1.004464 0.907924   0.999442   535796800      0.856887             0             0      NA      NA        NA    NA
2000-01-04  0.966518  0.987723 0.903460   0.915179   512377600      0.784643             0             0      NA      NA        NA    NA

我试图创建一个列表,并合并它,但它没有工作。在这里你可以看到:

代码语言:javascript
复制
#That works for a single ticker AAPL      
full <- merge.xts(L$AAPL, Marubozu$AAPL, SMA$AAPL)

#This doesn't work
out3 <- Map(function(x) {full$x <- merge.xts(lista[[1]]$x, lista[[2]]$x)}, lista)

我想这只是一些简单的2行的事情,但不能真正找到解决办法,谢谢你的任何回应!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-25 18:49:47

我们可以用Map来实现这一点,因为list of xts元素具有相同的顺序,所以只需使用Map而不是创建listlist

代码语言:javascript
复制
library(xts)
out <- Map(merge.xts, L, Marubozu, SMA)
票数 3
EN

Stack Overflow用户

发布于 2021-12-25 18:48:45

下面是一个小函数u(),它将xts-index绑定到xts对象并转换为'data.frame'

代码语言:javascript
复制
u <- function(x) cbind.data.frame(index=index(x), unclass(x))

为了测试它,我们使用sample_matrix ( xts附带的)创建一些数据。我们将前两列和最后两列分割为两个单独的具有相同索引的xts对象。

代码语言:javascript
复制
library(xts)
data(sample_matrix)
sample.xts <- as.xts(sample_matrix, descr='my new xts object')

S1 <- as.xts(sample_matrix[,1:2])  ##
S2 <- as.xts(sample_matrix[,3:4])

现在,我们可以轻松地应用merge并从中创建一个新的xts对象。

代码语言:javascript
复制
res <- merge(u(S1), u(S2)) |>
  (\(x) xts(x[-1], x$index, descr='my new xts object'))()

class(res)
# [1] "xts" "zoo"

stopifnot(all.equal(res, sample.xts))  ## proof
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70481901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档