【问题标题】:subsetting R data after sorting排序后对R数据进行子集化
【发布时间】:2016-09-28 22:24:15
【问题描述】:

我有一个这样的数据表:

        datetime         EquipmentNumber Count Raw
1: 2012-11-28 16:00:00       100094233     1   2
2: 2012-11-30 10:00:00       100094233     2   2
3: 2012-11-30 11:00:00       100094233     0   0

我想为每个 EquipmentNumber 获得最高的 100 个 Raw 值(有 15 个)

我已经对我的数据进行了降序排序,对于每个EquipmentNumber,如下所示:

vc.sorted <- VisitorCounters[order(EquipmentNumber, -Raw),] 

但不知道如何对这些进行子集化,以便有一个数据表显示每个 Raw 的前 100 个值 EquipmentNumber

感谢您的帮助。

【问题讨论】:

    标签: r sorting subset


    【解决方案1】:

    使用dplyr包可以轻松完成

    library(dplyr)
    df %>% group_by(Equipmentnumber) %>% arrange(Raw, desc = T) %>% top_n(100)
    

    【讨论】:

      【解决方案2】:

      我们可以用data.table(因为OP 的数据集是data.table)以紧凑和更快的方式做到这一点。将“data.frame”转换为“data.table”(setDT(VisitorCounters) - 如果不是data.table),按“i”中的“设备编号”和ordering“原始”分组,我们得到head 的前 100 行。

      library(data.table)
      VisitorCounters[order(-Raw), head(.SD, 100), by = Equipmentnumber]
      

      或使用setorder

      setorder(VisitorCounters, Equipmentnumber, -Raw)[, head(.SD, 100), by = Equipmentnumber]
      

      使用可重现的示例

      set.seed(24)
      dt1 <- data.table(id = rep(1:3, each = 3), value = rnorm(9))
      setorder(dt1, id,-value)[, head(.SD, 1), by = id]
      #   id     value
      #1:  1 0.5365853
      #2:  2 0.8474600
      #3:  3 0.4445853
      

      【讨论】:

        【解决方案3】:

        您可以尝试使用orderby。根据Raw 列对数据框进行排序,然后为每个EquipmentNumber 选择前100 行。

        mt <- VisitorCounters[order(VisitorCounters$Raw, decreasing = T), ]
        by(mt, mt["EquipmentNumber"], head, n=100)
        

        【讨论】:

        • 是的,抱歉,这是我在这个网站上的第一篇文章。我尝试使用“按”进行排序,但我总是收到一条错误消息。 vc.sorted
        • 检查第一步。 mt 只是分配给已排序 df 的变量。
        • 好的,我用你的代码试过了,对于 mt,错误回来说“df$Raw 中的错误:'closure' 类型的对象不是子集”
        • @Kiwi95 你的数据集是data.table。一些data.frame 方法不适用于data.table.. 检查我的答案。
        • 是的,这次 mt 工作了,谢谢!但我想我需要用 setkey 来键入我的数据,我会查看 R 帮助
        猜你喜欢
        • 2017-07-29
        • 2019-09-26
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多