在按另一个变量分组的 r 数据表中排名值

Posted

技术标签:

【中文标题】在按另一个变量分组的 r 数据表中排名值【英文标题】:Rank values in r datatable grouped by another variable 【发布时间】:2016-09-15 06:47:40 【问题描述】:

我想使用数据表的 frank 函数按 id 对日期列进行排名。但是,我的排名似乎只考虑了日期列,而不是对应于它的 id。我还收到了其中 6 个我不确定的警告:

1..... 6: 在[.data.table(dups, , :=(rank, frank(dups, date, ties.method = "average")), : RHS 1 的长度为 10(大于第 6 组的大小 (1))。最后 9 个元素将被丢弃。

dups <- data.table (id = c('11', '11', '11', '22','22',
  '88', '99','44','44', '55'),
  date = mdy(c("1-01-2016", "1-02-2016", "1-02-2016","2-01-2016", 
  "2-02-2016")))

so.sample <- dups[, rank := frank(dups, date, ties.method = "average"), by = id]

例如,id = 11 和 date = 2016-01-01 应该排名 1 而不是 1.5,因为只有一个 id 和 date 的组合。

感谢帮助

【问题讨论】:

【参考方案1】:

它适用于“rank”和“frank”。也许您的日期变量格式不正确。代码如下:

dt1 <- data.table (id = c('11', '11', '11', '22','22',
                      '88', '99','44','44', '55'),
               date = as.Date(c("01-01-2016", 
                                "01-02-2016", 
                                "01-02-2016",
                                "02-01-2016", 
                                "02-02-2016"),
                              format = "%m-%d-%Y"))
setkey(dt1, date)
setkey(dt1, id)
dt1

    id       date
 1: 11 2016-01-01
 2: 11 2016-01-02
 3: 11 2016-01-02
 4: 22 2016-02-01
 5: 22 2016-02-02
 6: 44 2016-01-02
 7: 44 2016-02-01
 8: 55 2016-02-02
 9: 88 2016-01-01
10: 99 2016-01-02

dt1[, rank := frank(date),
    by = list(id)]
dt1

    id       date  rank
 1: 11 2016-01-01   1.0
 2: 11 2016-01-02   2.5
 3: 11 2016-01-02   2.5
 4: 22 2016-02-01   1.0
 5: 22 2016-02-02   2.0
 6: 44 2016-01-02   1.0
 7: 44 2016-02-01   2.0
 8: 55 2016-02-02   1.0
 9: 88 2016-01-01   1.0
10: 99 2016-01-02   1.0

此外,如果您只想枚举您的记录,使用.N 会很有帮助:

dt1[, Visit := 1:.N,
    by = list(id)]
dt1

    id       date rank Visit
 1: 11 2016-01-01  1.0     1
 2: 11 2016-01-02  2.5     2
 3: 11 2016-01-02  2.5     3
 4: 22 2016-02-01  1.0     1
 5: 22 2016-02-02  2.0     2
 6: 44 2016-01-02  1.0     1
 7: 44 2016-02-01  2.0     2
 8: 55 2016-02-02  1.0     1
 9: 88 2016-01-01  1.0     1
10: 99 2016-01-02  1.0     1

我希望这会有所帮助。

【讨论】:

以上是关于在按另一个变量分组的 r 数据表中排名值的主要内容,如果未能解决你的问题,请参考以下文章

选择具有最近日期的唯一值,按另一个值分组

按另一列值分组和计数

计算 20 秒间隔内的平均值并按另一列分组

将分组后列的多个值合并为python pandas中的一列

熊猫数据框:按列子集+按另一列分组

从R中的一系列分组变量中提取第一个值以计算旅行时间