我有一个data.frames列表,并希望使用各种权重对它们的列进行操作。将多个参数传递给Reduce
例如,从第二列中减去第一列(解决,见下文);或从第二次(未解决)减去第一次和第三次。
感谢在回答this问题时获得的慷慨帮助,我使用Reduce
解决了无重量的二维问题。
我希望能够灵活地运用重量 - 以及更高的比例。
我至今是:
priceList <- data.frame(aaa = rnorm(100, 100, 10), bbb = rnorm(100, 100, 10),
ccc = rnorm(100, 100, 10), ddd = rnorm(100, 100, 10),
eee = rnorm(100, 100, 10), fff = rnorm(100, 100, 10),
ggg = rnorm(100, 100, 10)
)
colDiff <- function(x)
{
Reduce('-', rev(x))
}
tradeLegsList <- combn(names(priceList), 3, function(x) priceList[x], simplify = FALSE)
tradeList <- lapply(tradeLegsList, colDiff)
从我可以告诉,Reduce
没有设计成多个参数。
我可以用2* tradeLegsList[[1]]$bbb - tradeLegsList[[1]]$aaa - tradeLegsList[[1]]$ccc
这个办法做到这一点,还有一些循环,但是看起来好像不是的R方式。
有没有办法通过权重向量?
理想情况下,我会将一个参数(如w = c(-1, 2, -1)
)传递给colDiff
(或Reduce
)函数......或类似的东西。
如果数据是像在你的例子,即所有'numeric'和每个列表元素具有相同的尺寸,然后我会强烈建议您将数据存储在3D数组中。那么你想做的事情可以用'%*%'(矩阵乘法)和可能的'aperm'完成。 – flodel
是的,数据一旦准备好就会看起来如何。谢谢,我会调查。 – ricardo