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 サイトの他の関連記事を参照してください。