首页 > 数据库 > mysql教程 > 如何在 R 中复制 SQL 的 RANK 函数(ROW_NUMBER、RANK、DENSE_RANK、LEAD、LAG)?

如何在 R 中复制 SQL 的 RANK 函数(ROW_NUMBER、RANK、DENSE_RANK、LEAD、LAG)?

Susan Sarandon
发布: 2024-12-31 16:41:09
原创
778 人浏览过

How Can I Replicate SQL's RANK Functions (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) in R?

在 R 中模拟 SQL 的排名函数

R 中的等效排名函数

数据。 table 包提供类似于 Oracle 的 SQL 等级的功能函数。

  • ROW_NUMBER():模仿此函数很简单。
  • RANK():data.table 的排名(x, ties.method = "min") 与 Oracle 类似RANK().
  • DENSE_RANK():将值转换为因子并返回整数值以模拟此函数。

Rank 函数使用示例

library(data.table)

DT <- data.table(ID = seq_len(4 * 3),
                 group = rep(1:4, each = 3),
                 value = rnorm(4 * 3),
                 info = c(sample(c("a", "b"), 4 * 2, replace = TRUE),
                           sample(c("c", "d"), 4, replace = TRUE)),
                 key = "ID")

DT[, valRank := rank(-value), by = "group"]
登录后复制

DENSE_RANK模仿

DT[, infoRank := rank(info, ties.method = "min"), by = "group"]
DT[, infoRankDense := as.integer(factor(info)), by = "group"]
登录后复制

LEAD 和 LAG 模仿

根据组内 ID 的顺序创建排名变量。然后,使用 J() 从先前或后续记录中检索值。

DT[, idRank := rank(ID), by = "group"]
setkey(DT, group, idRank)

DT[, prev := DT[J(group, idRank - 1), value, mult = 'last']]
登录后复制

对于 LEAD,向 idRank 添加适当的偏移量并使用 multi = 'first':

DT[, nex := DT[J(group, idRank + 1), value, mult = 'first']]
登录后复制

以上是如何在 R 中复制 SQL 的 RANK 函数(ROW_NUMBER、RANK、DENSE_RANK、LEAD、LAG)?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板