R 변수 생성 - R byeonsu saengseong

R은 통계프로그래밍 언어로 일반인이 사용하기 쉽게 만든 언어이다.

그러나 필자는 프로그래머이고 비 프로그래머의 인식으로 접근하기 힘든면이 있다.

강의 또한 그러하다. 강의 곳곳에 프로그래머적인 시선이 들어있으니 참고하여 필요없으면 넘겨라.

참고:

[개발환경 셋팅하기]R설치 및 환경변수 등록-(1)

[개발환경 셋팅하기]RStudio설치-(2)

[개발환경 셋팅하기]RStudio프로젝트 만들기-(3)

R에서는 변수를 코드를 통해서 생성할 수 있다.

이런기능이 지원되는 언어도 별로없고 사실 다른 언어에서는 이기능을 지원하더라도 크게 쓸일이 없다.

그러나 R에서는 은근히 이게 많이 사용되는데 변수명을 컬럼명이나 로우명으로 많이 쓰기 때문이다.

변수를 생성하는 함수는 assign함수이다.

또한 변수를 코드로 생성가능하니 변수를 코드로 집어내서 반환하는것 역시 가능하다.

ㅇ때 사용하는 함수는 get함수이다.

차례 차례 써보도록 하자.

assign

assign은 변수를 생성하는 함수이다. 사용하는 방식은 되게 쉽다. 한 예시를 보자.

assign('x',10)

assign('y',c())

assign('z',NA)

해당 코드를 실행하고 결과를 보자.

R 변수 생성 - R byeonsu saengseong

해당 변수가 만들어 진걸 알 수 있다.

굳이 이렇게 귀찮게 만들어야 하나요? 라는 질문을 할 수 있다.

그럼 이렇게 변수를 만들 수도 있지 않을까??

for(i in seq(10)){

  assign(paste0('제',i,'회'),seq(i))

}

for문을 사용하여 여러 변수를 자동으로 생성할 수 있다.

또한 사용자에게 입력을 받아서 변수를 만들 수도 있다.

assign('ins',readline('Insert:'))

이렇게 사용하면 사용자에게 입력받아서 그 값을 변수에 저장할 수 있는 것이다.

만약 17을 입력했다고 가정하자.

그럼 변수가 저장된걸 확인할 수 있다.

get

get은 문자열로 변수를 반환시킬 수 있다.

보통 assign으로 만든 변수는 코드의 상황에 따라서 변하기 때문에 assign으로 만든 변수는 get으로 호출하는 경우가 많다.

  • R 변수 생성 - R byeonsu saengseong
  • 블로그
  • Tech Blog

블로그 목적 

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

블로그 요약

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

블로그 상세 내용

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

R 변수 생성 - R byeonsu saengseong

  • 위에서 설명한 것과 같이 그냥 해당 점수에 대한 변수들만 가지고, 분석을 할 수 있겠지만요...
  • 우리는 좀더 세가지 분류된 데이터를 조합해서,
  • 합의 성격을 가진 "합 파생변수"를 만들어 볼 수 있습니다. 
  • 추가적으로 평균점수의 성격을 가진 "평균 파생변수" 또한 만들어 볼수도 있을테고요...
  • 즉, 아래 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 byeonsu saengseong

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

R 변수 생성 - R byeonsu saengseong

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

R 변수 생성 - R byeonsu saengseong

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

R 변수 생성 - R byeonsu saengseong

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

R 변수 생성 - R byeonsu saengseong

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

R 변수 생성 - R byeonsu saengseong

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

R 변수 생성 - R byeonsu saengseong

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

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

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

R 변수 생성 - R byeonsu saengseong

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

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

R 변수 생성 - R byeonsu saengseong

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

결론

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

  • 정리해보면..

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

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

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

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


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

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

  • R 변수 생성 - R byeonsu saengseong

    텔레그램 봇을 활용한 네이버 검색결과 공유하기 (ft. python) 블로그 목적 Python 프로그래밍을 이용해서, 텔레그램 봇(bot)을 활용한 네이버 검색결과 공유하기 기능에 대해서 공부및 정리후 나만의 노하우와 지식을 공유한다. 블로그 요약 1. 텔레그램 봇(Bot)를 생성해본다. 2. Python 프로그램을 통해서 웹브라우저에서 크롤링한 검색결과를 텔레그램 봇을 통해 메시지를 전송해본다. 블로그 상세내용 우선, 텔레그램 봇 생성하기 입니다. 아래와 같이 텔레그램 검색창에 @BotFather 를 검색합니다. 검색하면요....위와 같이 유사한 bot이 많이 나오는데요... 저는 가장 위에 나오는 @BotFather 를 선택하려고 합니다. 선택하면, 아래와 같이 나오고요.. 맨 하단의 START(시작) 을 클릭합니다. 시작버튼을...
  • Bootstrap을 사용한 Breadcrumb(브레드크럼) 깔끔하게 정리하기 이번 블로그는 제가 가진 사고의 틀(?) 을 깨보려고 합니다. 기존에 제 블로그를 보셨다면 지속적인 저만의 블로그 틀(?)을 아실텐데요.. (그래서, 이번블로그는 자유롭게 날적이(?) 스타일로...^^;; . ) 아무튼 본론으로 바로 넘어가서 ... Breadcrumb(브레드크럼) 은 무엇일까요? 브레드크럼(빵부스러기로 표시한 길)은 헨젤과 그레텔에서 나온 용어라고 하고요... 예전에 어릴적 헨젤과 그레텔을 봤었는데요..그때추억이..ㅋ 그리고 요즘 우리 애기한테도 읽어주는 고전(?)이기도 합니다. 대략적인 동화의 내용은 이러한데요.. 가난한 나무꾼 부부의 자식인 오빠 헨젤과 여동생 그레텔이 부모에게 버림받고, 숲을 헤매이게 되는 동화인데요.. 처음에는 집에 무사히...
  • R 변수 생성 - R byeonsu saengseong

    SheetJS 이용한 HTML의 table의 엑셀파일 다운로드 기능 소개 블로그 목적 SheetJS 이용한 HTML의 table을 쉽게 엑셀파일로 다운로드 하는 기능에 대해서 공부및 정리후 나만의 노하우와 지식을 공유한다. 블로그 요약 1. SheetJS 에 대해서 알아본다. 2. SheetJS 의 XLSX.utils 예제를 알아본다. 블로그 상세내용 우선, SheetJS에 대해서 알아볼까요? SheetJS 는 구글에서 아래와 같이 검색하시면 해당 홈페이지를 찾으실 수 있고요.. 그럼, 한번 조심스럽게 SheetJS URL을 클릭해볼까요? (개인적으로 첫만남이 쫌 설레이시죠? 저는 현재 진행하는 프로젝트의 기능 추가 요건이라서 첫만남을 급만남(?)으로 했네요 ㅋㅋ) 클릭하시면 아래와 같이 SheetJS 의 민낯(?)을 확인하실 수 있습...
  • querydsl 관련 자주 사용하는 fetch 깔끔하게 정리하기 블로그 목적 SpringBoot 프로젝트 개발시 사용하는 querydsl 관련 fetch 에 대해서 정리해본다. 블로그 요약 SpringBoot 프로젝트를 수행관련 주로 사용하는 fetch, fetchOne 등등 에 대해서 깔끔하게 정리해본다. 블로그 상세 내용 우선 querydsl 이란 무엇인지 알아볼까요? 구글의 검색창에 아래와같이 "querydsl" 이라고 검색을 해볼께요. 위와 같이 querydsl 홈페이지가 나오는데, 해당 홈페이지에 들어가보겠습니다. 들어가보시면, 아래와 같은 웹페이지를 보실 수 있는데요. 출처 : querydsl 홈페이지 아래는 querydsl 관련 가장먼저 만나는 문구입니다. Unified Queries for Java.Queryds...

관련 블로그

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

    블로그 목적 R언어에서 변수명을 바꾸는 방법을 정리및 공유한다. 블로그 요약 하나, 변수명을 바꿔야 하는 경우에 대한 나의 생각을 정리해본다. 둘, R언어에서 변수명을 바꾸는 방법을 정리해본다. dplyr 패캐지의 rename함수에 대해서 알아본다. 블로그 상세 내용 우선, 변수명을 바꿔야 하는 경우에 대한 저의 생각을 정리해보겠습니다. 제가 주식투자관련 애용하는 한가지 사이트를 소개하도록 하겠습니다. 바로 KIND, 즉, 대한민국대표기업공시채널인데요. 구글에서 아래와 같이 검색하시면됩니다. 해당사이트를 가시면, 오늘의 공시/시장조치/IPO현황/채권정보 등등 투자에 활용할 수 있는 여러데이터가 존재하는데요. 투자에도 활용할수 있지만, R언어를 공부할때 실습할 수 ...

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

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

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

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