R Sum every k columns in matrix

前端 未结 5 921
猫巷女王i
猫巷女王i 2020-12-06 15:28

I have a matrix temp1 (dimensions Nx16) (generally, NxM)

I would like to sum every k columns in each row to one value.

Here is what I got to so far:

5条回答
  •  佛祖请我去吃肉
    2020-12-06 16:21

    If the dimensions are equal for the sub matrices, you could change the dimensions to an array and then do the rowSums

     m1 <- as.matrix(temp1)
     n <- 4
     dim(m1) <- c(nrow(m1), ncol(m1)/n, n)
     res <- matrix(rowSums(apply(m1, 2, I)), ncol=n)
     identical(res[,1],rowSums(temp1[,1:4]))
     #[1] TRUE
    

    Or if the dimensions are unequal

      t(sapply(seq(1,ncol(temp2), by=4), function(i) {
                      indx <- i:(i+3)
                   rowSums(temp2[indx[indx <= ncol(temp2)]])}))
    

    data

    set.seed(24)
    temp1 <- as.data.frame(matrix(sample(1:20, 16*4, replace=TRUE), ncol=16))
    
    set.seed(35)
    temp2 <- as.data.frame(matrix(sample(1:20, 17*4, replace=TRUE), ncol=17))
    

提交回复
热议问题