按R中的行组求和

wol*_*oor 7 r sum matrix apply

这对于标题来说是一个很难的问题,所以编辑很受欢迎.数据如下所示:

mat =         

     [,1]
 [1,] 9.586352e-04
 [2,]           NA
 [3,] 2.605841e-03
 [4,] 7.868957e-05
 [5,] 1.000000e+00
 [6,]           NA
 [7,] 8.208500e-02
 [8,] 2.605841e-03
 [9,] 7.868957e-05
[10,] 1.000000e+00
[11,] 9.586352e-04
[12,] 8.208500e-02
[13,] 2.605841e-03
[14,] 7.868957e-05
[15,] 1.000000e+00
Run Code Online (Sandbox Code Playgroud)

我想总计每5个元素,所以因为有15个,我返​​回的向量的长度应该是3.(15/3).因此,例如,只计算NA为0.

我该怎么做呢?

我也想忽略NA

Dat*_*neR 6

m <- matrix(1:15, ncol = 1)
m[cbind(c(3,7),c(1, 1))] <- NA

library(zoo)
rollapply(m, sum, width = 5, by = 5, na.rm = TRUE)
     [,1]
[1,]   12
[2,]   33
[3,]   65
Run Code Online (Sandbox Code Playgroud)


Ric*_*ven 6

你可以用 tapply()

mat <- matrix(c(1, 2, NA, 4:6, NA, 8:15))
## set up a grouping vector
grp <- rep(1:(nrow(mat)/5), each = 5)
## compute group sums
tapply(mat, grp, sum, na.rm = TRUE)
#  1  2  3 
# 12 33 65   
Run Code Online (Sandbox Code Playgroud)

低效率的选择涉及到split()vapply()

vapply(split(mat, grp), sum, 1, na.rm = TRUE)
#  1  2  3 
# 12 33 65 
Run Code Online (Sandbox Code Playgroud)


use*_*650 5

这是理想的?rowsum,应该很快

使用RStudent的数据

rowsum(m, rep(1:3, each=5), na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

第二个参数group定义了应用总和的行.更一般地说,可以定义组参数rep(1:nrow(m), each=5, length=nrow(m))(如果应用于向量nrow,length则为sub )