在 RStudio 中操作数组、特定列和行求和

问题描述 投票:0回答:1

在 RStudio 中,我有 marray_1。我想操作数组来计算列 j 的总和除以特定行 i 的总和,并从选定的列 j 开始。

例如,对于以下数组,我想要:

    marray_1 <- matrix(c(17, 8, 1, 27, 0, 16, 11, 32, 0, 0, 13, 66), nrow = 3, ncol = 4)
    
    (17)/(17+8+1+27)
    (8+16)/((16+11+32)+(8+1+27))
    (1+11+13)/((1+27)+(11+32)+(13+66)

我将向数组添加额外的行和列,因此我希望编写代码能够合并额外的行和列。

我目前有以下代码:

    
      rows <- dim(marray_1)[1]
      columns <- dim(marray_1)[2]
      # Loops to calculate 
      for (j in 1:n.occasions){
         for(i in 1:nrow(marray_1)){
        array[i, j] <- colSums(marray_1)[j]/(sum(marray_1[i,j:n.occasions]))
      }
    }
    
    # Print the resulting array
    print(array)

我知道分子是正确的,但我正在努力计算分母。任何帮助将不胜感激!

r sorting multidimensional-array rowsum
1个回答
0
投票

假设您确实想在对

byrow=TRUE
的通话中使用
matrix

marray_1 <- matrix(c(17, 8, 1, 27, 0, 16, 11, 32, 0, 0, 13, 66), nrow = 3, ncol = 4, byrow = TRUE)
marray_1
#      [,1] [,2] [,3] [,4]
# [1,]   17    8    1   27
# [2,]    0   16   11   32
# [3,]    0    0   13   66

我想你正在寻找的是

sapply(1:(ncol(marray_1)-1),
       function(cn) sum(marray_1[1:cn,cn]) / sum(marray_1[1:cn,cn:ncol(marray_1)]))
# [1] 0.3207547 0.2526316 0.1666667

与你的价值观相比:

c(
    (17)/(17+8+1+27),
    (8+16)/((16+11+32)+(8+1+27)),
    (1+11+13)/((1+27)+(11+32)+(13+66))
)
# [1] 0.3207547 0.2526316 0.1666667
© www.soinside.com 2019 - 2024. All rights reserved.