首頁 > 資料庫 > mysql教程 > 如何在 R 複製 SQL 的 RANK、DENSE_RANK、LEAD 和 LAG 函數?

如何在 R 複製 SQL 的 RANK、DENSE_RANK、LEAD 和 LAG 函數?

DDD
發布: 2024-12-29 05:09:10
原創
569 人瀏覽過

How to Replicate SQL's RANK, DENSE_RANK, LEAD, and LAG Functions in R?

如何在R 中模擬SQL 的排名函數

對資料進行分區和排名是SQL 中的常見操作,R 使用者經常需要類似的功能。例如,Oracle ROW_NUMBER()、RANK() 和 DENSE_RANK() 函數會根據行在組內或整個表中的順序將整數值指派給行。

SQL Rank 的 R 等效項函數

data.table 套件提供了類似於 SQL 的分區和排序功能的功能。在 R 中,Rank 函數表示如下:

Rank:

rank(x, ties.method = "min")
登入後複製

Dense Rank:

as.integer(factor(x))
登入後複製

範例

至說明這些函數的用法,請考慮以下資料:
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")
登入後複製

依群組內的值對每個 ID進行排名

DT[, valRank := rank(-value), by = "group"]
登入後複製

密集排名值組內信息

DT[, infoRank := rank(info, ties.method = "min"), by = "group"]
DT[, infoRankDense := as.integer(factor(info)), by="group"]
登入後複製

正在模仿LEAD 和LAG

LEAD 和LAG 函數用於傳回群組中下一行或上一行的值。在 R 中,可以使用 J() 函數來實現:

上一行:

DT[, prev := DT[J(group, idRank - 1), value, mult = 'last']]
登入後複製

下一行:

DT[, nex := DT[J(group, idRank + 1), value, mult = 'first']]
登入後複製

偏移行索引

要從更遠的行(例如前兩行或後兩行)檢索值,請相應地偏移idRank:

前兩行:

DT[, prev2 := DT[J(group, idRank - 2), value, mult = 'last']]
登入後複製

接下來兩個行:

DT[, nex2 := DT[J(group, idRank + 2), value, mult = 'first']]
登入後複製

以上是如何在 R 複製 SQL 的 RANK、DENSE_RANK、LEAD 和 LAG 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板