【问题标题】:Summing across 2 columns for multiple columns and skipping redundant combinations对多列的 2 列求和并跳过冗余组合
【发布时间】:2019-08-19 05:15:01
【问题描述】:

我想找到矩阵中所有唯一两列组合中的值的总和(按行)。比如我想知道V1+V2,所以我不需要知道V2+V1,我也不需要V1+V1,V2+V2等等。

使用我在这里收集的一些信息,我已经能够创建一个循环函数来部分解决我的问题。它将第 1 到第 4 列中的值与第 2 到第 5 列中的值相加。

set.seed(3)
mydata<-as.data.frame(matrix(rexp(20, rate=.1), ncol=5))
for (i in 1:4) {
for (j in 2:5) {
Newcolname <- paste0(names(mydata)[i],"_",names(mydata)[j]) 
mydata[[Newcolname]] <- rowSums(mydata[,c(i,j)])
}
}

这段代码创建了我想要的,但信息太多。我得到了 16 个新列,其中第 1 到第 4 列的总和与第 2 到第 5 列配对。这包括我想排除的冗余信息。

理想情况下,我只想在 j>i 的情况下运行此函数,因此它应该使用以下总和创建 10 个新列:V1_V2、V1_V3、V1_V4、V1_V5、V2_V3、V2_4、V2_V5、V3_V4、V3_V5、V4_V5 .谢谢你的帮助。我是创建循环函数的新手。

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一种使用基础 R 中的 combn 的方法 -

    combn(1:ncol(mydata), 2, FUN = function(x) {rowSums(mydata[, x])})
    

    这是带有命名的代码。我想知道是否有更好的方法-

    # generate combinations only once; to be used for calculation and naming
    combos <- combn(1:ncol(mydata), 2)    
    # calculate sums for each combo
    res <- apply(combos, 2, function(x) {
      rowSums(mydata[, x])
    })    
    # set names
    colnames(res) <- apply(combos, 2, function(x) paste0("V", x, collapse = "_"))    
    res
    
             V1_V2     V1_V3    V1_V4    V1_V5     V2_V3     V2_V4    V2_V5
    [1,] 19.348279 17.986973 18.88804 21.19083  2.722721  3.623788  5.92658
    [2,]  8.238209  7.295317 48.38643 18.24868  3.232870 44.323986 14.18623
    [3,] 35.165599 13.101673 18.15211 24.19188 23.608940 28.659382 34.69914
    [4,] 10.141323 14.114612 12.03548 27.52704  4.174245  2.095110 17.58667
             V3_V4     V3_V5     V4_V5
    [1,]  2.262482  4.565274  5.466342
    [2,] 43.381094 13.243336 54.334452
    [3,]  6.595455 12.635218 17.685659
    [4,]  6.068398 21.559962 19.480826
    

    【讨论】:

    • 谢谢,这是我需要的。是否有类似的方法来标记列?例如,我想根据对每个输出做出贡献的变量来标记每一列“V1_V2”。
    猜你喜欢
    • 2021-10-19
    • 2019-01-12
    • 1970-01-01
    • 2020-04-23
    • 2017-04-09
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多