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

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

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 のランクに相当する R関数

data.table パッケージは、SQL のパーティション機能やランキング機能と同様の機能を提供します。 R では、ランク関数は次のように表されます。

ランク:

rank(x, ties.method = "min")
ログイン後にコピー

密ランク:

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']]
ログイン後にコピー

行のオフセットIndex

さらに離れた行 (前または次の 2 行など) から値を取得するには、それに応じて idRank をオフセットします:

前の 2 行:

DT[, prev2 := DT[J(group, idRank - 2), value, mult = 'last']]
ログイン後にコピー

次の 2 つ行:

DT[, nex2 := DT[J(group, idRank + 2), value, mult = 'first']]
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート