본문 바로가기
R

R 기초문법 - 변수명 수정 rename, 조건문 ifelse

by d22pinsights 2024. 7. 8.

dplyr 패키지 설치

rename()을 사용하기 위해서는 먼저 "dplyr"패키지를 설치해야함

install.packages("dplyr")  #dplyr 설치
library(dplyr)             #dplyr 로드

 

활용할 데이터 생성

데이터 활용할 때는 원본을 복사해서 쓰기

틀려도 원본은 살아있으면 다시 시작하면 되니까~

# 샘플 데이터 생성
df_raw <- data.frame(var1 = c(1,2,1),
                     var2 = c(2,3,2))
df_raw #원본
# 복사본 만들기
df_new <- df_raw
df_new

 

변수명 바꾸기 rename()
# 변수 이름 변경
df_new <- rename(df_new,v2 = var2)

rename( 데이터이름, 바꿀 이름 = 바꾸기 전 이름)

바꿀 이름 <- 바꾸기 전 이름 : 이런식으로 외우기

df_new
  var1 v2
1    1  2
2    2  3
3    1  2

var2 에서 v2로 변수명이 바뀜!

 

혼자 해보기 5장 19p

mpg 데이터의 변수명은 긴 단어를 짧게 줄인 축약어로 되어있습니다. cty 변수는 도시 연비, hwy 변수는 고속도로 연비를 의미합니다. 변수명을 이해하기 쉬운 단어로 바꾸려고 합니다. mpg 데이터를 이용해서 아래 문제를 해결해 보세요.

        Q1. ggplot2 패키지의 mpg 데이터를 사용할 수 있도록 불러온 뒤 복사본을 만드세요.

        Q2. 복사본 데이터를 이용해서 ctycity, hwyhighway로 변수명을 수정하세요.

        Q3. 데이터 일부를 출력해서 변수명이 바뀌었는지 확인해 보세요

mpg_raw <- as.data.frame(ggplot2::mpg)
mpg_new <- mpg_raw
mpg_new
mpg_new <- rename(mpg_new, city = cty, highway=hwy)
head(mpg_new,3)

 > 한번에 변수 두개 이름 바꿀 수도 있음!

 

파생변수 만들기

새로운 변수를 만들때 기억 할 건 $

df <- data.frame(var1=c(4,8,6),
                 var2=c(2,5,4))
#결과
> df
  var1 var2
1    4    2
2    8    5
3    6    4

# 합계 변수
df$sum <- df$var1 + df$var2
> df # sum이란 변수가 생김
  var1 var2 sum
1    4    2   6
2    8    5  13
3    6    4  10

sum이란 변수 안에는 va1 + var2 한 값이 들어있음

 

ifelse를 사용해서 파생변수 만들기

ifelse(조건문, 참일때, 거짓일때)

mpg <- as.data.frame(ggplot2::mpg)
# 통합연비 변수
# cty 도시 연비, hwy 고속도로 연비
mpg$total <- (mpg$cty + mpg$hwy)/2

# 통합연비 변수를 범주형 변수로 만들기
# ifelse(조건,조건을 만족할 때 값, 조건을 만족하지 않을 때 값)
mpg$test <- ifelse(mpg$total >= 20, "pass", "fail")

다음 코드는 mpg$total이 20이상이면 pass를 부여하고 그렇지 않으면 fail을 부여해 test라는 변수를 생성함

 

중첩 조건문 사용하기

방금은 pass와 fail 두가지 값이었기 때문에 ifelse를 1개만 사용함

A,B,C 등급을 나누기로 했을 때, 부여하는 값이 3개이기 때문에 ifelse를 2개 써야함

부여하는 값의 개수 -1개 만큼 ifelse를 사용해야함

# 25이상이라면 A
# 20이상이라면 B
# 그렇지 않다면 C
mpg$grade <- ifelse(mpg$total >= 25, 'A',ifelse(mpg$total >=20, 'B','C'))
head(mpg)

# 4개의 그룹을 가지는 범주형 변수 만들기
# 30보다 크면 A등급
# 25보다 크면 B등급
# 20보다 크면 C등급
# 나머지는 D등급
mpg$grade_new <- ifelse(mpg$total >= 30, "A",
                        ifelse(mpg$total >= 25, "B",
                               ifelse(mpg$total >= 20, "C", "D")))

위와 같이 3등급이면 ifelse문 2개

4등급이라면 ifelse문 3개

 

꼭 Enter를 쓸 필요는 없지만, 코드가 길어지면 가독성이 떨어지기 때문에 

가독성을 위해 Enter 치는 걸 추천함

 

빈도 확인
table(mpg$test)
qplot(mpg$test)

table을 통해 빈도수를 빠르게 알 수 있고

qplot을 통해 막대그래프를 그릴 수 있다