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

    Navigation

    • FindPage
    • HelpContents
    • FunReading

    Upload page content

    You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

    File to load page content from
    Page name
    설명

    • 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.