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
- dplyr이 내장 함수에 비해 사용하기 쉽고 처리 속도도 빠르지만
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
- 연속 변수 - Numeric 타입
- 변환 함수(Coercion Function) : 변수의 타입을 바꾸는 기능
- as.numeric()
- numeric으로 변환
- as.factor()
- factor로 변환
- as.character()
- character로 변환
- as.Date()
- Date로 변환
- as.data.frame()
- Data Frame으로 변환
- as.numeric()
- 다양한 변수 타입들
- 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"
- numeric : 실수
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"
- 벡터(Vactor)
출처 : Do it! 쉽게 배우는 R 데이터 분석
Do it! 쉽게 배우는 R 데이터 분석
통계, 프로그래밍을 1도 몰라도 데이터를 혼자서 다룰 수 있다!데이터 분석 프로젝트 전 과정 수록!데이터 분석을 처음 시작한 초보자도 어깨춤을 추며 데이터를 혼자 다룰 수 있게 한다는 강의
book.naver.com
'Do it! > R' 카테고리의 다른 글
Do it! 쉽게 배우는 R 데이터 분석 - R Markdown (0) | 2021.03.08 |
---|---|
Do it! 쉽게 배우는 R 데이터 분석 - 통계 분석 기법 (0) | 2021.03.06 |
Do it! 쉽게 배우는 R 데이터 분석 - 인터랙티브 그래프 (0) | 2021.03.06 |