【发布时间】:2011-12-29 16:07:23
【问题描述】:
我想通过在具有相同行名的行中添加值来聚合矩阵的行。我目前的做法如下:
> 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
这种方法的问题是我需要将它应用于许多非常大的矩阵(最多 1.000 行和 30.000 列)。在这些情况下,计算时间非常长(使用 ddply 时同样的问题)。有没有更有效的解决方案?原始输入矩阵是 tm 包中的 DocumentTermMatrix 是否有帮助?据我所知,它们以稀疏矩阵格式存储。
【问题讨论】:
-
不完全清楚你需要做什么,但我会玩一下
reshape包(melt() 和 cast())。但更重要的是:你是如何首先允许重复的行名的?这通常是个坏主意。 -
在我的数据中,行名是日期。每当我在同一日期有多个观察结果时,它们都是重复的。
-
@Christian 没关系。我认为 Carl 正在考虑数据帧,其中严格不允许重复。
-
嗯,是的,但我的意思是行名应该区分行。但是不要紧。詹姆斯的回答可能就足够了。尝试对方法的每个步骤进行一些时间测试,看看主要瓶颈在哪里。