gpt4 book ai didi

r - 将 xts 对象中的所有列乘以另一个单列 xts 对象

转载 作者:行者123 更新时间:2023-12-02 17:45:04 28 4
gpt4 key购买 nike

library(xts)
set.seed(1)
x = xts( cbind(a=1:10,b=20:11) , Sys.Date()+1:10 )
y = xts( runif(10) , Sys.Date()+1:10 )
z = x*y

给我*.default(x, y)中的错误:不一致的数组

我想要的是将 x 中的每一列乘以 y 中的值。

预期结果:

                   a         b
2012-08-04 0.2655087 5.310173
2012-08-05 0.7442478 7.070354
2012-08-06 1.7185601 10.311361
2012-08-07 3.6328312 15.439532
2012-08-08 1.0084097 3.226911
2012-08-09 5.3903381 13.475845
2012-08-10 6.6127269 13.225454
2012-08-11 5.2863823 8.590371
2012-08-12 5.6620264 7.549369
2012-08-13 0.6178627 0.679649

理想情况下,该解决方案应该在 index(x)!=index(y)

时有效

旁白:我想出了这个技巧:

 z = xts( apply(x,2,function(col) col*y ) , index(x) )

它适用于测试数据,但在我的真实数据上,它提示 Error in array(ans, c(len.a%/%d2, d.ans), if (!all(vapply(dn .ans, is.null, : 'dimnames' 的长度 [1] 不等于数组范围(我还没有设法在一小段测试数据中重现这一点。)

Joshua和DWin的答案不存在这个问题,因此不仅在简洁性上而且在结果质量上都更胜一筹!

最佳答案

如果您只删除单列 xts 对象的尺寸,它应该可以工作。然后 R 的回收规则就可以接管。这比 DWin's solution 稍好一些因为如果 index(x) != index(y) 它将正常工作。

R> (z <- x*drop(y))
a b
2012-08-03 0.2655087 5.310173
2012-08-04 0.7442478 7.070354
2012-08-05 1.7185601 10.311361
2012-08-06 3.6328312 15.439532
2012-08-07 1.0084097 3.226911
2012-08-08 5.3903381 13.475845
2012-08-09 6.6127269 13.225454
2012-08-10 5.2863823 8.590371
2012-08-11 5.6620264 7.549369
2012-08-12 0.6178627 0.679649
R> (z1 <- x*drop(y[1:5]))
a b
2012-08-03 0.2655087 5.310173
2012-08-04 0.7442478 7.070354
2012-08-05 1.7185601 10.311361
2012-08-06 3.6328312 15.439532
2012-08-07 1.0084097 3.226911

关于r - 将 xts 对象中的所有列乘以另一个单列 xts 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11789022/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com