【问题标题】:How to get top n companies from a data frame in decreasing order如何从数据框中按降序获得前 n 家公司
【发布时间】:2012-08-29 23:27:30
【问题描述】:

我正在尝试从数据框中获取前“n”家公司。下面是我的代码。

data("Forbes2000", package = "HSAUR")
sort(Forbes2000$profits,decreasing=TRUE)

现在我想从这个排序的向量中获得前 50 个观察值。

【问题讨论】:

    标签: r sorting plyr top-n


    【解决方案1】:

    head 和tail 是非常有用的函数!

    head(sort(Forbes2000$profits,decreasing=TRUE), n = 50)
    

    如果你想要data.frame的前50行,那么你可以使用plyr中的arrange函数对data.frame进行排序,然后使用head

    library(plyr)
    
    head(arrange(Forbes2000,desc(profits)), n = 50)
    

    请注意,我将 profits 包装在对 desc 的调用中,这意味着它将按降序排序。

    不用 plyr 也能工作

    head(Forbes2000[order(Forbes2000$profits, decreasing= T),], n = 50)
    

    【讨论】:

      【解决方案2】:

      使用order 对data.frame 进行排序,然后使用head 仅获取前50 行。

      data("Forbes2000", package = "HSAUR")
      head(Forbes2000[order(Forbes2000$profits, decreasing=TRUE), ], 50)
      

      【讨论】:

        【解决方案3】:

        您可以从dplyr 使用rank。

            library(dplyr)
            top_fifty <- Forbes2000 %>%
                 filter(rank(desc(profits))<=50)
        

        这会按降序对您的数据进行排序,并且仅保留排名小于或等于 50 的值(即前 50 名)。
        Dplyr 非常有用。命令和链接语法非常容易理解。 10/10 会推荐。

        【讨论】:

        • 也可以使用top_n(n = 50, wt = profits) 代替filter(...)
        【解决方案4】:

        Mnel 是对的,一般来说,您希望使用 head() 和 tail() 函数以及排序函数。我应该提一下,对于中等数据集,Vince 的方法工作得更快。如果你没有使用 head() 或 tail(),那么你可以使用基本的 subsection 调用运算符 []....

         library(plyr)
         x = arrange(Forbes2000,desc(profits))
         x = x[1:50,]
         #Or using Order
         x = Forbes2000[order(Forbes2000$profits, decreasing= T),]
         x = x[1:50,]
        

        但是,我确实推荐使用 head()、tail() 或 filter() 函数,因为常规 [] 运算符假定您的数据以易于绘制的数组或矩阵格式结构化。 (希望这能回答 Teja 的问题)

        现在您选择哪种包装很大程度上是主观的。但是阅读人们的cmets,我会说选择使用plyr的arrange(),{bases}的order()和{utils} head()和tails,或者plyr()很大程度上取决于内存大小和行大小你的数据集。我可以更详细地介绍 Plyr 和有时 Dplyr 如何在处理大型复杂数据集时遇到问题,但我不想跑题。

        附:这是我第一次回答,因此非常感谢您的反馈。

        【讨论】:

          猜你喜欢
          • 2021-04-27
          • 2022-06-11
          • 1970-01-01
          • 1970-01-01
          • 2022-12-17
          • 2013-05-18
          • 2013-07-02
          • 1970-01-01
          • 2017-12-21
          相关资源
          最近更新 更多