Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meniru Fungsi RANK, DENSE_RANK, LEAD dan LAG SQL dalam R?
Cara Mencontohi Fungsi Kedudukan SQL dalam R
Pembahagian dan pemeringkatan data ialah operasi biasa dalam SQL, dan pengguna R sering memerlukan fungsi yang serupa. Sebagai contoh, fungsi Oracle ROW_NUMBER(), RANK(), dan DENSE_RANK() memberikan nilai integer kepada baris berdasarkan susunannya dalam kumpulan atau pada keseluruhan jadual.
R Setara bagi Kedudukan SQL Fungsi
Pakej data.table menyediakan fungsi yang serupa dengan partition dan ranking SQL keupayaan. Dalam R, fungsi pangkat diwakili seperti berikut:
Kedudukan:
rank(x, ties.method = "min")
Kedudukan Padat:
as.integer(factor(x))
Contoh
Untuk menggambarkan penggunaan ini fungsi, pertimbangkan data berikut:
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")
Kedudukan Setiap ID mengikut Nilai Dalam Kumpulan
DT[, valRank := rank(-value), by = "group"]
Nilai Kedudukan Padat mengikut Maklumat Dalam Kumpulan
DT[, infoRank := rank(info, ties.method = "min"), by = "group"] DT[, infoRankDense := as.integer(factor(info)), by="group"]
Mencontohi LEAD dan LAG
Fungsi LEAD dan LAG digunakan untuk mengembalikan nilai baris seterusnya atau sebelumnya dalam kumpulan. Dalam R, ini boleh dicapai menggunakan fungsi J():
Baris Sebelumnya:
DT[, prev := DT[J(group, idRank - 1), value, mult = 'last']]
Baris Seterusnya:
DT[, nex := DT[J(group, idRank + 1), value, mult = 'first']]
Mengimbangi Baris Indeks
Untuk mendapatkan semula nilai daripada baris yang lebih jauh (cth., dua baris sebelumnya atau seterusnya), mengimbangi idRank dengan sewajarnya:
Dua Baris Sebelumnya:
DT[, prev2 := DT[J(group, idRank - 2), value, mult = 'last']]
Dua Seterusnya Baris:
DT[, nex2 := DT[J(group, idRank + 2), value, mult = 'first']]
Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi RANK, DENSE_RANK, LEAD dan LAG SQL dalam R?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!