【发布时间】:2012-09-05 01:22:30
【问题描述】:
我有一个 data.frames 列表,并希望使用各种权重对其列进行操作。
例如,从第二列中减去第一列(已解决,见下文);或从第二个的两倍(未解决)中减去第一个和第三个。
感谢在回复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单行来完成。 -
是的,这就是数据准备好后的样子。谢谢,我会调查的。