假设我有一个由三列组成的数据框
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
我正在寻找的解决方案应该适用于任意数量的列,而不仅仅是五列
答案 0 :(得分:2)
我们可以使用combn
创建一次取2的数据帧名称的组合,然后编写一个自定义函数,该函数将数据帧作为子集并将其彼此相乘。
combn(names(df1), 2, function(x) df1[x[1]] * df1[x[2]], simplify = FALSE)
此命令返回以下六个数据帧的列表(a*b
,a*c
,a*d
,b*c
,b*d
,c*d
)举个例子。
答案 1 :(得分:1)
我们可以直接在数据集上使用combn
,将m
指定为2以选择列的成对组合,将FUN
指定为Reduce
及其参数{{ 1}}作为f
来乘以每个成对列的相应元素
*