Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Meniru Fungsi RANK SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) dalam R?

Bagaimanakah Saya Boleh Meniru Fungsi RANK SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) dalam R?

Susan Sarandon
Susan Sarandonasal
2024-12-31 16:41:09752semak imbas

How Can I Replicate SQL's RANK Functions (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) in R?

Meniru Fungsi Kedudukan SQL dalam R

Setara Fungsi Kedudukan dalam R

Data. pakej jadual menawarkan fungsi yang serupa dengan pangkat SQL Oracle fungsi.

  • ROW_NUMBER(): Meniru fungsi ini adalah mudah.
  • RANK(): data.table's rank(x, ties.method = "min") adalah serupa dengan Oracle RANK().
  • DENSE_RANK(): Tukar nilai kepada faktor dan kembalikan nilai integer untuk meniru fungsi ini.

Contoh Penggunaan Fungsi Kedudukan

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")

DT[, valRank := rank(-value), by = "group"]

PADA_PERINGKAT Mimikri

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

Tiruan LEAD dan LAG

Buat pembolehubah kedudukan berdasarkan susunan ID dalam kumpulan. Kemudian, gunakan J() untuk mendapatkan semula nilai daripada rekod sebelumnya atau seterusnya.

DT[, idRank := rank(ID), by = "group"]
setkey(DT, group, idRank)

DT[, prev := DT[J(group, idRank - 1), value, mult = 'last']]

Untuk LEAD, tambahkan offset yang sesuai pada idRank dan gunakan multi = 'first':

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meniru Fungsi RANK SQL (ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG) 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