通过rowname在大矩阵中聚合行

Chr*_*ian 7 aggregate r

我想通过在具有相同rowname的行中添加值来聚合矩阵的行.我目前的做法如下:

> M
  a b c d
1 1 1 2 0
1 2 3 4 2
2 3 0 1 2
3 4 2 5 2
> index <- as.numeric(rownames(M))
> M <- cbind(M,index)
> Dfmat <- data.frame(M)
> Dfmat <- aggregate(. ~ index, data = Dfmat, sum)
> M <- as.matrix(Dfmat)
> rownames(M) <- M[,"index"]
> M <- subset(M, select= -index)
> M
   a b c d
 1 3 4 6 2
 2 3 0 1 2
 3 4 2 5 2
Run Code Online (Sandbox Code Playgroud)

这个appraoch的问题是我需要将它应用于许多非常大的矩阵(最多1.000行和30.000列).在这些情况下,计算时间非常长(使用ddply时会出现同样的问题).有没有更有效的方法来提出解决方案?原始输入矩阵是否来自tm包的DocumentTermMatrix有帮助吗?据我所知,它们以稀疏矩阵格式存储.

Jam*_*mes 7

这是一个使用by和的解决方案colSums,但由于默认输出,需要一些摆弄by.

M <- matrix(1:9,3)
rownames(M) <- c(1,1,2)
t(sapply(by(M,rownames(M),colSums),identity))
  V1 V2 V3
1  3  9 15
2  3  6  9
Run Code Online (Sandbox Code Playgroud)