R 파생변수 조건 - r pasaengbyeonsu jogeon

파생변수

변수들을 조합하거나 함수를 적용해 새로 만든 변수

변수 조합으로 파생 변수 생성

  • a$새로만들변수 <- a$조합할변수1 + a$조합할변수2 형태로 씀
  • 예시
choi$mean <- (choi$math + choi$english) / 2

조건문 이용해 파생 변수 생성

ifelse(조건, "조건에맞을때", "조건에맞지않을때") 형태로 사용

choi$grade <- ifelse(choi$math >= 70, "pass", "non-pass")

히스토그램 생성

hist(변수) 로 생성

빈도표

table(변수)로 확인 가능

막대그래프로 빈도 표현

qplot(변수)로 표현

  • ggplot2 패키지 활용하므로 install & load 필수

중첩조건문

변수 <- ifelse(조건, "만족할경우",
              ifelse(2번째조건, "만족O", "만족X"))

형태로 사용, 예시 ▽

mpg$grade <- ifelse(mpg$total >= 30, "A",
                    ifelse(mpg$total >= 20, "B", "C"))

  • R 파생변수 조건 - r pasaengbyeonsu jogeon
  • 블로그
  • Tech Blog

블로그 목적 

  • R언어에서 파생변수 만드는 방법을 공유한다.

블로그 요약

  • 하나, 파생변수란 무엇인지에 대해서 알아본다.
  • 둘, R언어에서 파생변수를 만드는 방법을 알아본다.
  • 셋, 생성한 파생변수를 통해서 데이터를 분석및 이용해 본다.

블로그 상세 내용

  • 우선 파생변수란 무엇일까요?
    • 파생변수(Derived Variable)라는 개념은 기존의 변수를 변형해 만드는 변수를 말하는데요...
  • 갑자기 어느날, 우리에게 어떤 수치값을 가지고 분석해야하는 미션이 갑자기 주어져서, 그 부분을 생각해 봐야 한다고 가정해 보시죠?
    • "아 몰랑!! 생각하기 시로!" 하며...
    • 그냥 아무런 고민과 생각없이 나에게 주어진 변수 값을 가지고 해당 수치값을 분석하는 방법을 택할 수 있습니다. 
  • 하지만, 우리는 모든 일들을 생각할때, 자신의 가지고 있는 편견과 고정관념을 저 멀리!! 버려야 하는데요...(가능한 조금더 유연한 생각을 해야 되겠죠..하지만, 인간이다 보니 저도 잘 안될때가 있습니다;;; 고정관념을 버렸다고 생각했으나, 바로 뒤에 있는;;; )
  • 아무튼..다시말해서, 유연한 생각을 통한 우리가 가진 사고의 틀을 깨게 된다면요...아래와 같은 2가지 방법도 우리는 생각할 수 있는데요..
    • 첫번째, 특정 함수를 적용해서 새변수를 만들어 분석하거나 이용한다.
    • 두번째, 기존 변수를 조합해서 새변수를 만들어 분석하거나 이용한다.
  • 즉, 위에서 설명한 "파생변수"를 사용해서 새로운 시각에서 해당 변수와 데이터를 분석하는 것이죠...
  • T.hub 랭킹을 예를 들어 보겠습니다. 
    • T.hub 랭킹을 구성하는 요소가  글쓰기 점수 , 출석 점수, 좋아요 점수 로 구성된다고 가정해보겠습니다. 
  • 그럼 아래와 같이 간단한 표로 구성할 수 있는데요...(데이터는 무작위로, 아래와 같이 원시 데이터가 주어졌다고 가정해보겠습니다.)

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 위에서 설명한 것과 같이 그냥 해당 점수에 대한 변수들만 가지고, 분석을 할 수 있겠지만요...
  • 우리는 좀더 세가지 분류된 데이터를 조합해서,
  • 합의 성격을 가진 "합 파생변수"를 만들어 볼 수 있습니다. 
  • 추가적으로 평균점수의 성격을 가진 "평균 파생변수" 또한 만들어 볼수도 있을테고요...
  • 즉, 아래 2가지 파생변수를 추가적으로 만드는 것이죠!
    • 합 파생변수
    • 평균 파생변수
  • 그럼, R 언어를 통해서 파생변수들을 만들어 보겠습니다.
  • 먼저, 데이터 프레임변수를 생성해 보겠습니다.
df <- data.frame(w_point = c(100,90,80,70,60,50,40,30,20),
                 a_point = c(30,30,28,100,26,25,24,23,22),
                 l_point = c(50,100,30,70,40,10,5,20,1))
  • 그러면, R 스튜디오에서 아래와 같이, 데이터프레임이 정상적으로 생성된것을 확인할 수 있고요.

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 두번째, 글쓰기점수(w_point) + 출석점수(a_point) + 좋아요 점수(l_point) 를 합산한 파생변수를 만들어 보겠습니다. 
df$sum_point <- df$w_point + df$a_point + df$l_point
  • 그러면, R 스튜디오에서 아래와 같이, 합 파생변수(sum_point)를 확인할 수 있습니다. 

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 세번째, 글쓰기점수(w_point) + 출석점수(a_point) + 좋아요 점수(l_point) 의 평균 점수를 구한 파생변수를 만들어 보겠습니다. 
df$mean_point <- (df$w_point + df$a_point + df$l_point)/3
  • 그러면, R 스튜디오에서 아래와 같이, 평균 파생변수(mean_point)를 확인할 수 있습니다.

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 위 결과값을 보고나서, 저는 갑자기 중간값이 궁금해졌습니다. !!
  • (물론, 지금은 변수 값이 적어서, 눈으로  쓰으윽(?) 하면 바로 126이구나 알수 있지만요...하지만 데이터가 엄청많다고 가정한다면...눈으로 하다보면,, 눈이 빠질지도...;;;;)
  • 즉, 친절하게도 R 에서는 중간값을 바로 알 수 있는 함수를 지원합니다. 
  • 바로 summary() 하는 함수죠...바로 사용해서 중간값을 찾아보겠습니다.
summary(df$sum_point)
  • 해당 명령을 실행시키면 바로 한눈에 중간값을 알수 있습니다. (물론, min / max 값도 바로 알수 있죠!!)

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 바로 126 이라고 알려주네요...!!
  • 추가적으로, 합 파생변수의 히스토그램을 생성해 볼까요?
    • 히스토그램이란, 값의 빈도를 막대길이로 표현한 그래프를 말합니다. 
  • 즉, 히스토그램을 보면 어떤 값을 지닌 데이터가 많은지 전반적인 분포를 알수 있습니다. 
  • 역시, R 에서는 히스토그램을 바로 그려주는 함수를 지원합니다. 
  • 바로 hist() 라는 함수이죠...바로 히스토그램을 그려보겠습니다. 
hist(df$sum_point)
  • 해당 명령을 실행시키면, R스튜디오 오른쪽 아래 Plots 창에 출력이 됩니다. 
  • (쓰으윽, 보니깐요...합산 포인트가 50~100점대가 3개로 가장 빈도가 많군요...)

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 여기서 잠깐, 데이터 분석관련 제가 알게된 사실을 중간 고백(?) 해보도록 하겠습니다. 
    • 하나, 합산 포인트의 중간값은 126 이다]
    • 둘, 합산 포인트의 빈도가 가장 높은 구간은 50~100점대이다.
    • 셋, 합산 포인트의 빈도가 가장 낮은 구간은 0~50 점대, 150~200점대 이다...라는 사실을 알게 되었습니다.
    • (만약 데이터가 엄청많다고 한다면, R 언어를 알고 있으면 바로 위의 정보는 쉽게 알수 있겠네요...감사하게도요!!)
  • 이어서, 갑자기 제가 하고 싶은게 불현듯, 떠올랐습니다.(점수가 있으면, 포상을 하고 싶은생각이!! ^^;) 
  • 그런데, 포상의 기준을 어떻게 잡아야 할까요?? (참고로, T.hub 는 350점을 기준으로 잡고 있습니다. )
  • 그런데 무작정 350점을 포상 커트라인으로 잡으려고 봤더니...헉..ㅋ 아무도 없네요....(포상금액이 굳었네요....;;; .. 이러면 안되겠죠? 어느정도 예산이 있으면 사용해야 하니깐요..)
  • 그럼, 이제 저만의 기준을 잡아야할것 같은데..어떻게 할지 고민을 좀 해봅니다. (고민중....)
  • 고민을 해보니, 예산을 생각해서 위에서 구한 중간값 126 보다는 높아야할것 같아보이고요..

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 음, summary 와 히스토그램을 판단근거로위의 180 점 정도를 기준으로 잡으면 될것 같아보입니다. !! (결정했습니다 !! 180점)
  • 그럼, 눈으로?? 아니죠 지금은 데이터가 적기때문에 가능하지만..(데이터가 엄청많다면...포상자 구하려다가 퇴근못하겠죠..ㅋ)
  • 여기서 저는 생각합니다. "포상 합격 판정 파생변수"를 만들어야 겠군요! 라고요...
  • R언어에는 조건에 따라 서로 다른 값을 반환하는 함수를 "조건문 함수(Conditional Statments)" 라고 부르는데요..
  • 바로 ifelse() 조건문 함수입니다. 
  • 드디어 특정함수를 통해서, 파생변수를 만드는 순간이 왔네요...ㅎ
  • 아래 소스코드가 들어가면 될것 같습니다.
df$reward_result <- ifelse(df$sum_point >= 180, "true", "false")
  • 해당 명령을 실행시키면, 아래와 같이 바로 포상을 줄 사람이 결정되어 나옵니다. (3명, 1 / 2 / 4)

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 그럼, "포상 합격 판정 파생변수"도 만들어 봤으니, 포상을 받는 사람과 받지못하는 사람의 비율도 바로 추출해 볼까요?

  • 바로 table() 함수를 사용하면 됩니다. 

table(df$reward_result)
  • 해당 명령을 실행시키면, 아래와 같이 바로 결과가 나옵니다. (6:3 비율이군요)

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 그리고, 시각화 할 수 있는 ggplot2 라이브러리를 로드 해서, 막대그래프도 한번 생성해 보겠습니다. 
# 데이터를 시각화하기 위한 ggplot2 라이브러리 설치
.libPaths("E:/0.dev/15.dev-r-project/Library")
install.packages("ggplot2")
library(ggplot2)

# 포상관련 빈도 막대그래프
qplot(df$reward_result)
  • 해당 명령을 실행시키면, 아래와 같이 "막대그래프"를 확인해 볼 수 있습니다. (역시 그래프를 보니 텍스트보다는 더욱 인지가 잘되네요..)

R 파생변수 조건 - r pasaengbyeonsu jogeon

  • 아무튼, 오늘 블로그에서 전달할 내용은 여기 까지고요...

결론

  • 이제까지 R언어에서 파생변수를 만드는 방법을 간략하게 진행해 봤는데요....

  • 정리해보면..

    • 하나, 파생변수(Derived Variable)라는 개념은 기존의 변수를 변형해 만드는 변수를 말합니다. 

    • 둘, 우리는 모든 일들을 생각할때, 자신의 가지고 있는 편견과 고정관념을 저 멀리!! 버려야 합니다. (즉, 더 좋은방법을 고민해보고 찾아야겠죠^^)

    • 셋, R언어 사용법을 쉽게 전달하기 위해서, 포상이라는 시나리오를 만들어봤는데요..(힘든과정이겠네요...)

  • 마지막으로 제 부족한 글이 조금이라도 이글을 보시는 분들에게 도움이 되셨으면 좋겠네요..


나의 목표 및 다짐을 항상 내곁에 두기

  • 목표
    • 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
    • 현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기
    • 나는 블로그 생태계에서 IT 테크관련 파워블로거가 반드시 된다!
  • 목표를 이루기 위한 실천방안
    • 꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.
    • 천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.
      • "천번 생각하는것보다 한번 행동하는 것이 더 중요하다."
    • 기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)
      • 천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.
    • 모든 실수에는 마술이 숨어 있다. 따라서 나는 실수하면 실수할수록, 그런 실수에서 더 많이 배울수록 삶에서 더 많은 마술을 갖는다.​​​​ 

관련 블로그

  • R언어에서 변수명을 바꾸는 방법 (feat. 주식투자자에게 필요한 데이터 활용)

    블로그 목적 R언어에서 변수명을 바꾸는 방법을 정리및 공유한다. 블로그 요약 하나, 변수명을 바꿔야 하는 경우에 대한 나의 생각을 정리해본다. 둘, R언어에서 변수명을 바꾸는 방법을 정리해본다. dplyr 패캐지의 rename함수에 대해서 알아본다. 블로그 상세 내용 우선, 변수명을 바꿔야 하는 경우에 대한 저의 생각을 정리해보겠습니다. 제가 주식투자관련 애용하는 한가지 사이트를 소개하도록 하겠습니다. 바로 KIND, 즉, 대한민국대표기업공시채널인데요. 〈

  • R언어에서 데이터 분석 및 파악하는 방법(feat. 주식투자자에게 꼭 필요한 대한민국 상장법인 자료)

    블로그 목적 R언어에서 데이터를 분석및 파악하는 방법을 정리및 공유한다. 블로그 요약 하나, 우리가 R언어를 배워야하는 이유에 대해서 나의 생각을 공유해본다. 둘, R언어에서 데이터를 분석 및 파악하는 방법에 대해서 알아본다. 블로그 상세 내용 우선, 우리가 R언어를 배워야하는 이유에 대한 저의 생각을 공유 해보겠습니다. 예를들어, 만약 어마어마한 빅데이터 파일을 받았다고 생각해 보겠습니다. 그리고, 해당 데이터 파일을 분석해보라는 특명(?) 이 내려졌다면요....ㄷㄷ;;; 그럼, 우선 우리는 어떻게 해야할까요? 처음에 제가 드는생각은 텍스트뷰어를 사용해볼까? 라고 생각할지도 모르겠습니다.

  • R언어에서 외부데이터를 활용하는 방법 (feat. excel/csv/rds 파일 활용)

    블로그 목적 R언어에서 외부데이터를 활용하는 방법을 정리및 공유한다. 블로그 요약 데이터 프레임(Data Frame)에 대해서 정리해본다. Excel 파일을 활용하는 방법에 대해서 정리해본다. CSV 파일을 활용하는 방법에 대해서 정리해본다. RDS 파일을 활용하는 방법에 대해서 정리해본다. 블로그 상세 내용 우선, 데이터프레임(Data Frame)에 대해서 정리해보겠습니다. 데이터프레임은 R언어에서 가장 많이 사용하는 데이터 형태입니다. 데이터프레임의 데이터 형태를 알아보면, 행/열로 구성된 사각형모양의 표를 생각하시면 됩니다. 별명 순위