【问题标题】:Sum rows of each unique combination of variables in r对 r 中每个唯一变量组合的行求和
【发布时间】:2017-01-18 10:32:34
【问题描述】:

我想创建新变量,它们是 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、C 列,“sum2”组合了 A、B、D,“sum3”组合了 A、B、E 等。

   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 的列表(所有组合的数量),我可以查看使用 output[[1]]、output[[2]] 等选择的每组变量,但是我该如何对每个行并将它们放入数据框中?

谢谢

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以做一个rowSums 并转换为data.frame,将'输出'的namescbind 设置为原始数据集。

    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)
    

    【讨论】:

    • 太棒了!我试图让它发挥作用,但一定是遗漏了一些东西。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多