728x90

15 R 내장 함수, 변수 타입과 데이터 구조

15-1 R 내장 함수로 데이터 추출하기

  • dplyr 패키지를 사용하지 않고 R에 기본적으로 내장되어 있는 함수들만 사용해도 데이터를 추출할 수 있음
    • dplyr이 내장 함수에 비해 사용하기 쉽고 처리 속도도 빠르지만
      다른 사용자들이 만든 코드를 이해하고 활용하려면 내장 함수를 사용하는 방법도 알아두어야 함
    • 내장 함수는 다른 함수들과 조합해 활용할 수 있음
    exam <- read.csv("./data/csv_exam.csv")
    
    exam[]  # 조건 없이 전체 데이터 출력
    
    ##    id class math english science
    ## 1   1     1   50      98      50
    ## 2   2     1   60      97      60
    ## 3   3     1   45      86      78
    ## 4   4     1   30      98      58
    ## 5   5     2   25      80      65
    ## 6   6     2   50      89      98
    ## ...
    
    exam[1, ]  # 1행 추출
    
    ##   id class math english science
    ## 1  1     1   50      98      50
    
    exam[exam$class == 1, ]  # class가 1인 행 추출
    
    ##   id class math english science
    ## 1  1     1   50      98      50
    ## 2  2     1   60      97      60
    ## 3  3     1   45      86      78
    ## 4  4     1   30      98      58
    
    # 1반이면서 수학 점수가 50점 이상
    exam[exam$class == 1 & exam$math >= 50, ]
    
    ##   id class math english science
    ## 1  1     1   50      98      50
    ## 2  2     1   60      97      60
    
    # 영어 점수가 90점 미만이거나 과학 점수가 50점 미만
    exam[exam$english < 90 | exam$science < 50, ]
    
    ##    id class math english science
    ## 3   3     1   45      86      78
    ## 5   5     2   25      80      65
    ## 6   6     2   50      89      98
    ## 7   7     2   80      90      45
    ## 8   8     2   90      78      25
    ## ...
    
    exam[, 1]  # 첫 번째 열 추출
    
    ##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
    
    exam[, "math"]  # math 변수 추출
    
    ##  [1] 50 60 45 30 25 50 80 90 20 50 65 45 46 48 75 58 65 80 89 78
    
    exam[, c("class", "math", "english")]  # class, math, english 변수 추출
    
    ##    class math english
    ## 1      1   50      98
    ## 2      1   60      97
    ## 3      1   45      86
    ## 4      1   30      98
    ## 5      2   25      80
    ## 6      2   50      89
    ## ...
    
    # 행, 변수 모두 인덱스
    exam[1, 3]
    
    ## [1] 50
    
    # 행 인덱스, 열 변수명
    exam[5, "english"]
    
    ## [1] 80
    
    # 행 부등호 조건, 열 변수명
    exam[exam$math >= 50, "english"]
    
    ##  [1] 98 97 89 90 78 98 65 56 98 68 78 68 83
    
    # 행 부등호 조건, 열 변수명
    exam[exam$math >= 50, c("english", "science")]
    
    ##    english science
    ## 1       98      50
    ## 2       97      60
    ## 6       89      98
    ## 7       90      45
    ## 8       78      25
    ## 10      98      45
    ## ...
    
    
    ## 수학 점수 50 이상, 영어 점수 80 이상인 학생들을 대상으로 각 반의 전 과목 총평균
    
    # 내장 함수 코드
    exam$tot <- (exam$math + exam$english + exam$science) / 3
    aggregate(data = exam[exam$math >= 50 & exam$english >= 80, ], tot~class, mean)
    
    ##   class      tot
    ## 1     1 69.16667
    ## 2     2 75.33333
    ## 3     3 64.33333
    ## 4     4 73.66667
    ## 5     5 73.00000
    
    # dplyr 코드
    library(dplyr)
    exam %>%
        filter(math >= 50 & english >= 80) %>%
        mutate(tot = (math + english + science) / 3) %>%
        group_by(class) %>%
        summarise(mean = mean(tot))
    
    ## # A tibble: 5 x 2
    ##   class  mean
    ## * <int> <dbl>
    ## 1     1  69.2
    ## 2     2  75.3
    ## 3     3  64.3
    ## 4     4  73.7
    ## 5     5  73

15-2 변수 타입

  • 함수에 따라 적용할 수 있는 변수 타입이 다르기 때문에 분석을 하기 전에 변수 타입이 무엇인지 확인
  • 함수를 실행했을 때 오류가 발생하거나 예상과 다른 결과가 출력되면 변수 타입을 확인하고 함수에 맞게 변경
  • 변수의 종류
    • 연속 변수 - Numeric 타입
      • 연속 변수(Continuous Variable)는 키, 몸무게, 소득처럼 연속적이고 크기를 의미하는 값으로 구성된 변수
      • 숫자가 크기를 지니기 때문에 더하기 빼기, 평균 구하기 등 산술을 할 수 있음
      • 양적 변수(Quantitative Variable)
      • R에서 연속 변수는 nemeric(뉴머릭)으로 표현
    • 범주 변수 - Factor 타입
      • 범주 변수(Categorical Variable)는 값이 대상을 분류하는 의미를 지니는 변수
      • 성별 변수는 남자는 1, 여자는 2로 각 범주를 분류
      • 숫자가 크기를 의미하지 않기 때문에 더하거나 평균을 구하는 등 산술을 할 수 없음
      • 명목 변수(Nominal Variable)
      • R에서 범주 변수는 factor(펙터)로 표현
    var1 <- c(1, 2, 3, 1, 2)          # numeric 변수 생성
    var2 <- factor(c(1, 2, 3, 1, 2))  # factor 변수 생성
    
    var1  # numeric 변수 출력
    
    ## [1] 1 2 3 1 2
    
    var2  # factor 변수 출력
    
    ## [1] 1 2 3 1 2
    ## Levels: 1 2 3
    
    var1 + 2  # numeric 변수로 연산
    
    ## [1] 3 4 5 3 4
    
    var2 + 2  # factor 변수로 연산
    
    ## [1] NA NA NA NA NA
    ## In Ops.factor(var2, 2) : 요인(factors)에 대하여 의미있는 '+'가 아닙니다.
    
    class(var1)
    
    ## [1] "numeric"
    
    class(var2)
    
    ## [1] "factor"
    
    levels(var1)
    
    ## NULL
    
    levels(var2)
    
    ## [1] "1" "2" "3"
    
    mean(var1)
    
    ## [1] 1.8
    
    mean(var2)
    
    ## [1] NA
    ## In mean.default(var2) :
    ##   인자가 수치형 또는 논리형이 아니므로 NA를 반환합니다
    
    var2 <- as.numeric(var2)  # numeric 타입으로 변환
    mean(var2)                # 함수 재적용
    
    ## [1] 1.8
    
    class(var2)   # 타입 확인
    
    ## [1] "numeric"
    
    levels(var2)  # 범주 확인
    
    ## NULL
  • 변환 함수(Coercion Function) : 변수의 타입을 바꾸는 기능
    • as.numeric()
      • numeric으로 변환
    • as.factor()
      • factor로 변환
    • as.character()
      • character로 변환
    • as.Date()
      • Date로 변환
    • as.data.frame()
      • Data Frame으로 변환
  • 다양한 변수 타입들
    • numeric : 실수
      • 1, 12.3
    • integer : 정수
      • 1L, 23L
    • complex : 복소수
      • 3 + 2i
    • character : 문자
      • "male", "%FEMALE#", "123"
    • logical : 논리
      • TRUE, FALSE, T, F
    • factor : 범주
      • 1, 2, a, b
    • Date : 날짜
      • "2014-04-16", "16/04/14"

15-3 데이터 구조

  • 데이터 구조(Data Structures)
    • 벡터(Vactor)
      • 1차원 ; 한 가지 변수 타입으로 구성
      • 하나의 값 또는 여러 개의 값으로 구성된 데이터 구조
      • 여러 변수 타입을 섞을 수 없고, 한 가지 타입으로만 구성
      # 벡터 만들기
      a <- 1
      a
      
      ## [1] 1
      
      b <- "hello"
      b
      
      ## [1] "hello"
      
      # 데이터 구조 확인
      class(a)
      
      ## [1] "numeric"
      
      class(b)
      
      ## [1] "character"
    • 데이터 프레임(Data Frame)
      • 2차원 ; 다양한 변수 타입으로 구성
      • 행과 열로 구성된 2차원 데이터 구조
      # 데이터 프레임 만들기
      x1 <- data.frame(var1 = c(1, 2, 3),
                       var2 = c("a", "b", "c"))
      x1
      
      ##   var1 var2
      ## 1    1    a
      ## 2    2    b
      ## 3    3    c
      
      # 데이터 구조 확인
      class(x1)
      
      ## [1] "data.frame"
    • 매트릭스(Matrix)
      • 2차원 ; 한 가지 변수 타입으로 구성
      • 데이터 프레임과 마찬가지로 행과 열로 구성된 2차원 데이터 구조지만 한 가지 변수 타입으로만 구성
      # 매트릭스 만들기 - 1~12로 2열
      x2 <- matrix(c(1:12), ncol = 2)
      x2
      
      ##      [,1] [,2]
      ## [1,]    1    7
      ## [2,]    2    8
      ## [3,]    3    9
      ## [4,]    4   10
      ## [5,]    5   11
      ## [6,]    6   12
      
      # 데이터 구조 확인
      class(x2)
      
      ## [1] "matrix" "array"
    • 어레이(Array)
      • 다차원 ; 2차원 이상의 매트릭스
      • 2차원 이상으로 구성된 매트릭스로, 한 가지 변수 타입으로만 구성
      # array 만들기 - 1~20으로 2행 x 5열 x 2차원
      x3 <- array(1:20, dim = c(2, 5, 2))
      x3
      
      ## , , 1
      ##
      ##      [,1] [,2] [,3] [,4] [,5]
      ## [1,]    1    3    5    7    9
      ## [2,]    2    4    6    8   10
      ##
      ## , , 2
      ##
      ##      [,1] [,2] [,3] [,4] [,5]
      ## [1,]   11   13   15   17   19
      ## [2,]   12   14   16   18   20
      
      # 데이터 구조 확인
      class(x3)
      
      ## [1] "array"
    • 리스트(List)
      • 다차원 ; 서로 다른 데이터 구조 포함
      • 모든 데이터 구조를 포함하는 데이터 구조로, 여러 데이터 구조를 합해 하나의 리스트로 만들 수 있음
      # 리스트 생성 - 앞에서 생성한 데이터 구조 활용
      x4 <- list(f1 = a,   # 벡터
                 f2 = x1,  # 데이터 프레임
                 f3 = x2,  # 매트릭스
                 f4 = x3)  # 어레이
      x4
      
      ## $f1
      ## [1] 1
      ##
      ## $f2
      ##   var1 var2
      ## 1    1    a
      ## 2    2    b
      ## 3    3    c
      ##
      ## $f3
      ##      [,1] [,2]
      ## [1,]    1    7
      ## [2,]    2    8
      ## [3,]    3    9
      ## [4,]    4   10
      ## [5,]    5   11
      ## [6,]    6   12
      ##
      ## $f4
      ## , , 1
      ##
      ##      [,1] [,2] [,3] [,4] [,5]
      ## [1,]    1    3    5    7    9
      ## [2,]    2    4    6    8   10
      ##
      ## , , 2
      ##
      ##      [,1] [,2] [,3] [,4] [,5]
      ## [1,]   11   13   15   17   19
      ## [2,]   12   14   16   18   20
      
      # 데이터 구조 확인
      class(x4)
      
      ## [1] "list"
출처 : Do it! 쉽게 배우는 R 데이터 분석
 

Do it! 쉽게 배우는 R 데이터 분석

통계, 프로그래밍을 1도 몰라도 데이터를 혼자서 다룰 수 있다!데이터 분석 프로젝트 전 과정 수록!데이터 분석을 처음 시작한 초보자도 어깨춤을 추며 데이터를 혼자 다룰 수 있게 한다는 강의

book.naver.com

728x90