【发布时间】:2017-06-14 10:54:52
【问题描述】:
对于一个可能不太理想的标题表示歉意 - 我似乎想不出更好的标题。
假设我有一个像这样的 3x5 矩阵:
test.df <- matrix(rep(1:5, 3), nrow = 3)
test.df
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 2 5 3
[2,] 2 5 3 1 4
[3,] 3 1 4 2 5
我想返回每列中最常具有最大值的行的索引。我可以像这样结合which.max、apply 和table 来做到这一点:
which.max(
table(
apply(test.df, 2, which.max)
)
)
首先我将which.max 应用于每一列:
apply(test.df, 2, which.max)
[1] 3 2 3 1 3
然后我将table 应用于结果向量,并计算给定行被发现具有最大值的次数。
table(
apply(test.df, 2, which.max)
)
1 2 3
1 1 3
最后,我再次使用which.max 来获取值最多的行的索引。
不幸的是,我需要对大约 20000 个矩阵执行上述操作,其中一些矩阵可能包含数千行。所以我想知道是否有更快和/或更优雅的解决方案。最好是利用 R 中矩阵运算的力量。
非常感谢!
【问题讨论】: