Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Manipulate of an array in RStudio, specific column and rowSums

In RStudio, I have marray_1. I want to manipulate the array to calculate the sum of column j divided by the sum of specific rows, i and starting at the selected column, j.

For example, for the follow array I would want:

    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)

I will be adding additional rows and columns to the array so I’m hoping to write the code to be able to incorporate additional rows and columns.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I currently have the following code:

    
      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)

I know the numerator is right but I’m struggling on how to calculate the denominator. Any help would be greatly appreciated!

>Solution :

Assuming you really meant to use byrow=TRUE in your call to 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

I think what you’re looking for is

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

Compared with your values:

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
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading