>데이터 베이스 >MySQL 튜토리얼 >R에서 SQL의 RANK, DENSE_RANK, LEAD 및 LAG 함수를 복제하는 방법은 무엇입니까?

R에서 SQL의 RANK, DENSE_RANK, LEAD 및 LAG 함수를 복제하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-29 05:09:10617검색

How to Replicate SQL's RANK, DENSE_RANK, LEAD, and LAG Functions in R?

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']]

행 오프셋 인덱스

더 멀리 있는 행(예: 이전 또는 다음 두 행)에서 값을 검색하려면 그에 따라 idRank를 오프셋하세요.

이전 두 행:

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

다음 2편 행:

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

위 내용은 R에서 SQL의 RANK, DENSE_RANK, LEAD 및 LAG 함수를 복제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.