假设我们有一个像这样的matrix
:
# Set seed
set.seed(12345)
# Generate data.frame
df <- matrix(sample(1:100,100), nrow = 10)
我想获取第一个n
最高值所在的行和列。
我知道使用which(df == max(df), arr.ind=TRUE)
我可以得到我想要的,但只能得到最高的值。
假设我们想要矩阵中最高的5个值的位置。根据前面的答案,我尝试了which(aux %in% sort(df, decreasing=T)[1:5], arr.ind = TRUE)
,但它不起作用。
我还知道,使用order(df, decreasing=T)
和调制的结果,我可以得到我正在寻找的行和列。不过,我认为这应该是最快的方法。
提前谢谢你的帮助
4条答案
按热度按时间w51jfk4q1#
可以使用
match()
和arrayInd()
:6ojccjat2#
可以使用
quantile
。在存在相同值的情况下,结果不需要是5。
也许使用tdigest可以加快分位数的搜索速度。
或者使用
order
的head
,并使用%%
和%/%
。或者用
arrayInd
变换索引。也许使用一些外部库可以帮助加速它,比如
collapse::radixorderv
。jei2mxaa3#
你的方法很有效。只是在使用
which
之前应该转换为二维数组:apeeds0o4#
带有
expand.grid
+order
的基本R选项下面是
data.table
版本,其中同时显示了值和索引它给出了