每隔一列乘以一列

时间:2019-03-11 03:15:52

标签: r

假设我有一个由三列组成的数据框

df1 <- data.frame(a=runif(10),b=runif(10),c=runif(10),d=runif(10))

并希望有一列所有组合的产品,但一列乘以自身除外

a*b, a*c, a*d, b*c, b*d, c*d

我正在寻找的解决方案应该适用于任意数量的列,而不仅仅是五列

2 个答案:

答案 0 :(得分:2)

我们可以使用combn创建一次取2的数据帧名称的组合,然后编写一个自定义函数,该函数将数据帧作为子集并将其彼此相乘。

combn(names(df1), 2, function(x) df1[x[1]] * df1[x[2]], simplify = FALSE)

此命令返回以下六个数据帧的列表(a*ba*ca*db*cb*dc*d)举个例子。

答案 1 :(得分:1)

我们可以直接在数据集上使用combn,将m指定为2以选择列的成对组合,将FUN指定为Reduce及其参数{{ 1}}作为f来乘以每个成对列的相应元素

*