如何在R中找到列表中最大的N个元素?

use*_*984 13 sorting indexing r list max

我在R中有一个浮点列表.对于给定的整数,N,我想在列表中找到最大N值的索引.所以例如,如果N是2,我想找到列表中两个最大值的索引.我该怎么做呢?

我不能重新排序我的清单.这就是我需要指数的原因.

Hon*_*Ooi 19

order(R, decreasing=TRUE)[1:N]
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 6

当前所有其他答案都需要调用order将在 O(M log M) 时间内运行的函数。如果 N 远小于元素总数 M,则更快的方法是对列表进行部分排序,然后提取大于或等于第 N 个最大的索引。这有 O(M + N log N) 运行时间,对于大 M 来说会快得多。

v <- list(1,7,4,3,9,1,2,3,0,1,2)
vec <- unlist(v)
N <- 3
partial <- length(v) - N + 1
Nth <- sort(vec, partial = partial)[partial]
indexes <- which(vec >= Nth)
vec[indexes]
Run Code Online (Sandbox Code Playgroud)

请注意,这不会处理列表中的关系。这里有一个较长的讨论。

将数字数据存储在向量而不是列表中是惯用的做法。因此对上面的调用unlist

作为一个函数,可以像这样实现:

maxn <- function(x, n) {
  partial <- length(x) - n + 1
  x[x >= sort(x, partial = partial)[partial]]
}
Run Code Online (Sandbox Code Playgroud)


Qua*_*bex 5

这是一个替代方案:

N <- 2
v <- c(3,  9, 11,  18,  5)
tail(order(v), N)
# [1] 3 4
Run Code Online (Sandbox Code Playgroud)