我想创建新变量,它们是3个原始变量的每个唯一组合的总和。
数据示例:
df1 <- data.frame(A=c(1,2,3,5.5,5), B=c(2,2,2,2,0.5), C=c(1.5,0,0,2.1,3), D=c(0.2,1,2,1,0.8), E=c(0.4,0.6,0.2,1.1,2))
A B C D E
1 1.0 2.0 1.5 0.2 0.4
2 2.0 2.0 0.0 1.0 0.6
3 3.0 2.0 0.0 2.0 0.2
4 5.5 2.0 2.1 1.0 1.1
5 5.0 0.5 3.0 0.8 2.0
我想使用3个变量的每个独特组合创建新列。例如。名为'sum1'的新列,结合了A,B,D组合的A,B,C组合'sum2',结合A,B,E等的'sum3'等。
A B C D E sum1 sum2 sum3
1 1.0 2.0 1.5 0.2 0.4 3.5 3.2 3.4
2 2.0 2.0 0.0 1.0 0.6 4.0 5.0 4.6
3 3.0 2.0 0.0 2.0 0.2 5.0 7.0 5.2
4 5.5 2.0 2.1 1.0 1.1 9.6 8.5 8.6
5 5.0 0.5 3.0 0.8 2.0 8.5 6.3 7.5
从其他问题我发现这将选择独特的组合:
output <- combn(ncol(df1), 3, FUN = function(x) df1[x], simplify = FALSE)
这给了我一个10的列表(所有组合的数量),我可以查看使用输出[[1]],输出[[2]]等选择的每组变量,但是我如何求和各行的行并将它们放入数据框中?
谢谢
答案 0 :(得分:1)
我们可以执行rowSums
并转换为data.frame
,设置&#39;输出的names
&#39;和cbind
原始数据集。
output <- as.data.frame(combn(ncol(df1), 3, FUN =function(x) rowSums(df1[x])))
names(output) <- paste0("sum_", combn(names(df1), 3, FUN = paste, collapse="_"))
cbind(df1, output)