【问题标题】:How to find the largest N elements in a list in R?如何在R中的列表中找到最大的N个元素?
【发布时间】:2013-07-12 16:39:31
【问题描述】:

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

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

【问题讨论】:

    标签: r list sorting indexing max


    【解决方案1】:
    order(R, decreasing=TRUE)[1:N]
    

    【讨论】:

      【解决方案2】:

      这里有一个替代方案:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          重新评论:

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

          【讨论】:

            猜你喜欢
            • 2013-05-28
            • 2016-05-24
            • 1970-01-01
            • 2015-06-24
            • 1970-01-01
            • 2023-03-15
            • 1970-01-01
            • 2021-11-01
            • 1970-01-01
            相关资源
            最近更新 更多