排序后对R数据进行子集化

时间:2016-05-31 04:09:18

标签: r sorting subset

我有一个这样的数据表:

        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

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

我已将数据降序排序,并为每个EquipmentNumber分类,如下所示:

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

但不知道如何将这些子集合为一个数据表,显示每个Raw的{​​{1}}的前100个值。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

使用if (!reader.IsDBNull(5)) { byte rawCreditHold = reader.GetByte(5); creditHold = (rawCreditHold == 1); }

可以轻松完成
dplyr

答案 1 :(得分:0)

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

EquipmentNumber

答案 2 :(得分:0)

我们可以使用data.table(因为OP的数据集为data.table)以紧凑且更快的方式执行此操作。将'data.frame'转换为'data.table'(setDT(VisitorCounters) - 如果它不是data.table),按'Equipmentnumber'分组,order''Raw'in'我',我们得到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