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
Lepaskan: 2024-12-29 05:09:10
asal
655 orang telah melayarinya

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")
Salin selepas log masuk

Kedudukan Padat:

as.integer(factor(x))
Salin selepas log masuk

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")
Salin selepas log masuk

Kedudukan Setiap ID mengikut Nilai Dalam Kumpulan

DT[, valRank := rank(-value), by = "group"]
Salin selepas log masuk

Nilai Kedudukan Padat mengikut Maklumat Dalam Kumpulan

DT[, infoRank := rank(info, ties.method = "min"), by = "group"]
DT[, infoRankDense := as.integer(factor(info)), by="group"]
Salin selepas log masuk

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']]
Salin selepas log masuk

Baris Seterusnya:

DT[, nex := DT[J(group, idRank + 1), value, mult = 'first']]
Salin selepas log masuk

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']]
Salin selepas log masuk

Dua Seterusnya Baris:

DT[, nex2 := DT[J(group, idRank + 2), value, mult = 'first']]
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan