ホームページ >データベース >mysql チュートリアル >SQL の RANK 関数 (ROW_NUMBER、RANK、DENSE_RANK、LEAD、LAG) を R でレプリケートするにはどうすればよいですか?

SQL の RANK 関数 (ROW_NUMBER、RANK、DENSE_RANK、LEAD、LAG) を R でレプリケートするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-31 16:41:09763ブラウズ

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 のrank(x, ties.method = "min") は Oracle のものと似ていますRANK().
  • DENSE_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']]
を使用します。

以上がSQL の RANK 関数 (ROW_NUMBER、RANK、DENSE_RANK、LEAD、LAG) を R でレプリケートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。