我想通过在具有相同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有帮助吗?据我所知,它们以稀疏矩阵格式存储.
这是一个使用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)