Home ChungLab Wiki
    • 설명
    • 못 고치는 문서
    • Menu
      • Navigation
      • RecentChanges
      • FindPage
      • 사이트맵
      • Help
      • HelpContents
      • HelpOnMoinWikiSyntax
      • 보기
      • 첨부
      • 정보
      • 원문 보기
      • 인쇄용 화면
      • 수정
      • 로드
      • 저장
    • 로그인

    Navigation

    • FindPage
    • HelpContents
    • FunReading
    2020-09-11 22:39:17에 수정된 1번째 판
    • Class
    • Statistics
    • RBasic1

    R 기본 1: 데이터 다루기

    변수와 값

    다음을 R에서 실행해보자. 결과가 예상대로 나오는가?

       1 2+3
       2 2*3
       3 2**3
       4 (1+2)*3
    

    다음은 어떤 결과가 나오겠는가? 먼저 예상한 후 실행 해 보자

       1 r <- 2
       2 surface <- pi*r^2
    

    참고로 <- 는 오른쪽의 값을 왼쪽에 대입하라는 뜻이며, = 로 대체할 수 있다.

       1 r = 2
       2 surface = pi*r^2
    

    기대했던 결과가 안 나온다면 다음을 실행 해 보자

       1 surface
       2 print(surface)
    

    이것은 어떤 결과가 나오겠는가?

       1 r = 3
       2 surface
       3 
       4 r = 3
       5 surface = pi*r^2
       6 surface
    

    변수와 벡터

    벡터(vector)란 수열(혹은 문자열)같이 어떤 값의 나열이다.

    • R에서는 c( , , , , ) 이렇게 표현한다.

    다음 코드는 무슨 뜻이겠는가? 계산 값이 어떻게 나올지 예상해보자.

       1 r = c(1,2,3,4,5,6,7,8)
       2 surface = pi*r^2
       3 surface
    

    이제 다음 코드도 이해할 수 있다

       1 plot(r, surface)
    
    • plot_r_circle.png

    여기까지가 numeric vector를 이용하여 값을 계산한 후 graph로 출력하는 방법이다.

    데이터형

    숫자 1(혹은 2, 혹은 3, 혹은 4, 혹은 5....후략)은 세 가지 의미로 해석할 수 있다.

    1. 숫자 1로서의 의미: 당연히 1 + 1 = 2 가 된다.
    2. 문자 1로서의 해석: 이 경우 1 + 1 = 11 이 된다. (문자 1에 문자 1을 더함)
    3. 기호로서의 1: 예를 들어 1학년이라는 뜻으로 1이라고 쓴 경우, 이것은 분류를 위한 기호일 뿐이다. 어떠한 계산도 가능하지 않다.
      • 1 대신에 병아리반, 햇님반이라고 해도 무리가 없다. 심지어 문자가 아닌 병아리나 햇님 이모티콘으로 바꿔도 상관없다.
      • 이런 경우를 범주형 값(categorical value)라고 하는데 R 세계에서는 factor라고 부른다.

    문제는 인간은 이 중 어떤 뜻의 1인지 순식간에 판단을 하지만, 컴퓨터는 이게 안 된다. 인간이 명시해주지 않으면 오류가 생긴다.

    1. 변수에 숫자를 그대로 입력하면 R는 numeric 값으로 인식한다. 예: a <- 3

    2. 변수에 입력하는 값에 따옴표 (" 혹은 ' 둘 다 가능)를 붙히면 문자(character)로 인식한다. 예: a <- '3'

    3. 지금 다루는 값이 범주형(categorical)이라면 factor() 로 명시해준다. 예: a <- factor(3)

    다음 코드는 오류를 포함한다. 어떤 오류가 있는가?

       1 r = c(1,2,3,4,5,6,7,8)
       2 r = factor(r)
       3 surface = pi*r^2
       4 surface
    

    iris 데이터의 Species는 범주형(categorical, or factor) vector이다.

       1 str(iris$Species)
    
    • 이 값(setosa, versicolor, virginica)은 범주형이 아니고 문자형으로 저장될 수도 있었다.
    • 그 때 달라지는 점(유리한 점 or 불리한 점)이 무엇일까...?

    data.frame

    data.frame은 R에서 가장 많이 쓰는 자료형이다.

    • 1개 이상 vector를 모아 놓은 것인데, 언뜻 MS excel의 worksheet와 비슷하게 생겼다.
    • Excel sheet는 자료형이 cell 별로 다를 수 있지만, R에서는 vector 별로 같은 자료형이어야 한다.
    • 즉 excel에서는 같은 column에서 1번 cell에 이름, 2번 cell에 키, 3번 cell에 몸무게를 입력해도 되지만,
    • R에서는 이름 column에는 이름만 문자형 vector로 입력해야 하고, 키는 숫자형 vector로 옆 column에 입력해야 한다.
    • 두번째 사람의 이름, 키, 몸무게는 그 다음 줄(row)에 입력한다. 이 각각의 row를 record 혹은 data point라고 부른다.
    • 불편해 보일 수 있지만 오류와 실수의 가능성을 줄여주므로 데이타 사이즈가 커질수록 더 편한 방식이다.

    data.frame의 예시:

    • head_iris.png

    • Numeric vector 4개 (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)와 Species vector로 이루어진 data.frame이다.

    • Species는 문자형(character)가 아니고 분류형(factor) 자료이다. str(iris)로 확인 가능

    data.frame 만들기

    data.frame()함수로 data.frame을 만들 수 있다.

       1 data.frame()
    
    • 결과: data frame with 0 columns and 0 rows 가 만들어진다.
    • 참고로 vector는 c() 이렇게 만든다.

    빈 data.frame 대신 내용이 있는 data.frame을 만들어보자.

       1 # data.frame의 내용은 vector 입니다.
       2 name <- c('Mike','Tim','Jane','Bob','Dylan','Liz')
       3 
       4 # 키와 몸무게는 타이핑이 귀찮으니 sample() 함수로 지정 해 줍시다.
       5 # sample() 함수는 주어진 range에서 n개의 숫자를 고르는 역할을 합니다.
       6 height <- sample(160:180, 6)
       7 weight <- sample(45:80, 6)
       8 
       9 # 성별도 sample() 함수로 지정 해 볼까요? (어차피 가짜 데이타...)
      10 sex <- sample( c('M','F'), 6, replace=TRUE)
      11 # sampling을 할 모집단으로 c('M', 'F') 을 주었습니다.
      12 # replace=TRUE 옵션을 지정하여 중복해서 선택이 가능하도록 했습니다.
      13 
      14 # 준비한 vector들을 하나의 data.frame으로 묶습니다.
      15 data.frame(Name = name, Height = height, Weight = weight, Sex=sex)
      16 
      17 # df라는 변수를 준비하여 이 data.frame을 대입합니다.
      18 df <- data.frame(Name = name, Height = height, Weight = weight, Sex=sex)
      19 
      20 # 이 과정을 하나의 문장으로 만들 수도 있습니다.
      21 df <- data.frame(Name = c('Mike','Tim','Jane','Bob','Dylan','Liz'),
      22                  Height = sample(160:180, 6),
      23                  Weight = sample(45:80, 6),
      24                  Sex = sample( c('M','F'), 6, replace=TRUE)) # 마지막 괄호 닫는 것 잊지 마시길
    

    만든 data.frame을 구경 해 볼까요?

       1 df
       2 str(df)
       3 plot(df)
    

    BMI 지수를 계산해서 이 data.frame에 BMI 라는 이름의 vector로 추가 해 봅시다.

       1 # 체질량지수 BMI = weight (킬로그램) / heigt(미터)의 제곱이므로
       2 df$BMI <- df$Weight / (df$Height / 100)^2
       3 
       4 # 확인 해 보면,
       5 df
    


    /CentralLimitTheorem   /ChiSquared   /Clustering   /InstallR   /InstallRStudio   /Lies   /NormalDistribution   /RBasic   /RBasic1   /RBasic2   /RBasic3   /RCloud   /RIntro   /RKorean   /T-Test  
    Copyright © ChungLab. Built on MoinMoin and Bootstrap. All Rights Reserved.