ch0nny_log

[빅데이터분석] R _ 31. 순위 출력 (rank) 본문

빅데이터 분석(with 아이티윌)/R

[빅데이터분석] R _ 31. 순위 출력 (rank)

chonny 2024. 7. 1. 14:09
문제1. 이름, 월급, 월급에 대한 순위를  출력하시오.
1) SQL
select ename, sal, rank() over(order by desc) 순위;​
2) R 
 emp$rnk <-  rank( -emp$sal, ties.method="min")
      emp[  order( emp$rnk, decreasing=F)  , c("ename", "sal", "rnk") ]​

설명: rank( -emp$sal, ties.method="min") 여기서 마이너스(-) 를 써야 월급이 높은 사원부터 순위를 부여합니다.

 

 

 

※ ties.method 의 옵션 이란? ?

1. min : 오라클의 rank 함수와 똑같음

2. max: 2등이 두명이면 둘다 3등으로 출력함.

3. first: 오라클의 rank와 같은데 순위가 같은 데이터가 있으면 인덱스 순서가 먼저 나온 데이터를 높은 순으로 부여함.

 

문제2.  아래의 SQL을 R 로 구현하시오.
1) SQL
select ename, sal, rank() over (order by sal desc) 순위
	from emp
    where job='SALESMAN';​
2) R
## 직업이 salesman인 사원들의 이름, 월급을 별도의 데이터 프레임을 구성
x<-emp[emp$job=='SALESMAN',c('ename','sal')]

## 별도로 구성한 데이터 프레임에서 순위를 파생변수로 생성
x$순위 <- rank(-x$sal, ties.method = 'min')

## 이름과 월급, 순위를 출력
x[order(x$순위,decreasing = F),]​

문제3. 위의 문제를 dense_rank로 구현하시오.
library(dplyr)
emp <- read.csv("emp.csv", header=T)
emp$순위 <- dense_rank(-emp$sal)
emp[ order( emp$순위, decreasing=F ), c("ename", "sal", "순위") ]

문제 4. emp20.csv로 emp20데이터 프레임을 구성하고 이름, 나이, 나이의 순위를 출력하느데 dense_Rank를 이용해서 출력하시오. 
emp20$순위 <- dense_rank(-emp20$age)
emp20[order(emp20$순위, decreasing = F),c('ename','age','순위')]​