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

时间:2013-07-12 16:39:31

标签: r list sorting indexing max

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

我无法重新排序列表。这就是我需要索引的原因。

4 个答案:

答案 0 :(得分:19)

order(R, decreasing=TRUE)[1:N]

答案 1 :(得分:4)

这是另一种选择:

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

答案 2 :(得分:2)

所有其他当前答案都需要调用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]

请注意,这不会处理列表中的联系。讨论时间更长here

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

作为功能,可以这样实现:

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

答案 3 :(得分:1)

你可能是指向量而不是列表,这是一个例子:

v = c(1,7,4,3,9)
v[order(-v)][1:3]
#[1] 9 7 4

评论:

order(-v)[1:3]
#[1] 5 2 3