Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meniru Fungsi RANK, DENSE_RANK, LEAD dan LAG SQL dalam R?

Bagaimana untuk Meniru Fungsi RANK, DENSE_RANK, LEAD dan LAG SQL dalam R?

DDD
DDDasal
2024-12-29 05:09:10609semak imbas

How to Replicate SQL's RANK, DENSE_RANK, LEAD, and LAG Functions in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn