주어진 데이터를 원하는 형태로 변형하려면 R에서 제공하는 내장 함수들을 사용할 수도 있습니다. 그러나 R에서 제공하는 내장 함수보다 더 편리하게 데이터를 변형하기 위해서 dplyr
패키지를 사용합니다.
쉽게 배우는 R데이터 분석 에서는 자주 사용하는 8개의 함수를 제시하였습니다.
함수 | 기능 |
---|---|
filter() | 행 추출 |
select() | 열(변수) 추출 |
arrange() | 정렬 |
mutate() | 변수 추가 |
summarise() | 통계치 산출 |
group_by() | 집단별로 나누기 |
left_join() | 데이터 합치기 (열) |
bind_rows() | 데이터 합치기 (행) |
dplyr 함수는 데이터 프레임 변수 뒤에 %>% 기호 (파이프 연산자) 를 사용해서 함수들을 연결하여 함수를 적용할 수 있습니다. %>% 기호는 R Studio 에서는 Ctrl + Shift + M
을 누르면 삽입할 수 있습니다.
Do it R에서 제공하는 csv_exam 파일을 활용하여 실습하여 보도록 하겠습니다.
library(dplyr)
exam <- read.csv("csv_exam.csv")
1. 조건에 맞는 데이터 추출하기 (행)
전에 배웠던 ifelse로도 같은 역할을 할 수 있습니다. 그러나 dplyr의 filter()
함수를 사용하면 더 간편하게 원하는 데이터를 추출해 낼 수 있습니다.
1반의 학생들의 데이터만 추출해 보겠습니다.
exam %>% filter(class == 1)
2반이 아닌 학생들의 데이터를 추출하려면 같지 않다!=
기호를 사용하여 추출할 수 있습니다.
exam %>% filter(class != 2)
초과, 미만, 이상, 이하도 동일하게 기호를 사용하면 됩니다. 영어 점수가 60점 이상인 경우만을 추출해 보겠습니다.
exam %>% filter(english >= 60)
여러 조건을 동시에 충족하게 하려면 그리고를 의미하는 논리 연산자 &
를 사용하면 됩니다.
exam %>% filter(english >= 60 & math >= 60)
여러 조건 중 하나를 충족하게 하려면 또는을 의미하는 |
기호를 사용하면 됩니다.
exam %>% filter(english >= 60 | math >= 60)
매치 연산자 %in%
을 사용하여 변수의 값이 지정된 조건에 해당되는지 한번에 확인할 수도 있습니다.
1, 3, 5반만 추출
exam %>% filter(class %in% c(1,3,5))
추출한 행으로 데이터를 만들수도 있습니다.
higher_60 <- exam %>% filter(english >= 60 | math >= 60)
2. 필요한 변수만 추출하기 (열)
dplyr 함수의 select()
함수는 필요한 열을 추출할 수 있습니다.
exam %>% select(math) # math 열만 추출
여러 열을 추출하려면 ,
를 활용하여 변수명을 나열하면 됩니다.
exam %>% select(math,english)
변수를 제외하려면 빼기 기호 -
를 사용하면 됩니다.
exam %>% select(-math) #math 열 제외하고
3. 함수 조합하기
dplyr 함수는 파이프 연산자 %>%
를 이용해 조합할 수 있습니다.
exam %>%
filter(class == 1) %>%
select(math)
4. 정렬하기
arrange()
를 이용하여 데이터를 원하는 순서로 정렬할 수있습니다.
1) 오름차순으로 정리하기
arrange()
에 기준으로 삼을 변수를 입력하면 오름차순으로 정렬됩니다.
exam %>% arrange(math)
2) 내림차순으로 정리하기
arrange()
함수 내에 desc()
함수를 적용하면 내림차순으로 정렬할 수 있습니다.
exam %>% arrange(desc(math))
5. 파생변수 추가하기
mutate()
함수를 사용하면 기존 데이터에 파생변수를 보다 더 쉽게 만들 수 있습니다.
exam %>%
mutate(total = math + english + science)
mutate()
에서도 ifelse()
를 적용하여 연속형 변수를 범주화 할 수 있습니다.
exam %>%
mutate(test = ifelse(science >= 60, "p", "f"))
6. 집단별로 요약 통계량 내기
group_by
() 와 summarise()
를 사용하면 집단별로 요약 통계량을 파악할 수 있습니다.
exam %>%
group_by(class) %>% #class 로 나누기
summarise(mean_math = mean(math)) #class 별 평균
summarise()
함수 안에는 연속형 변수만 들어갈 수 있습니다.
7. 데이터 합치기
1) 열 데이터 합치기
left_join()
을 사용하면 데이터의 행을 합칠 수 있습니다. 변수를 추가한다고 볼 수 있습니다. by =
파라미터에서 기준으로 삼을 변수명을 지정해 줄 수 있습니다.
test1 <- data.frame(id = c(1,2,3,4,5),
midterm = c(60,80,70,90,85))
test2 <- data.frame(id = c(1,2,3,4,5),
final = c(60,80,70,90,85))
total <- left_join(test1, test2, by = "id") #id를 기준으로 합친다.
2) 행 데이터 합치기
bind_rows()
를 사용하여 행 데이터를 합칠 수 있습니다. 데이터의 양이 늘어난다고 볼 수 있습니다.
group_a <- data.frame(id = c(1,2,3,4,5),
test = c(60,80,70,90,85))
group_b <- data.frame(id = c(6,7,8,9,10),
test = c(70,83,65,95,80))
group_all <- bind_rows(group_a, group_b)
Source Code
https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/data_Pretreatment
// 참고자료
김영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱,
2019 이영호, "확률과통계" 가천대학교, 2019.03.21
'Programming > R' 카테고리의 다른 글
그래프 만들기 (0) | 2019.04.30 |
---|---|
데이터 정제하기 (데이터 클린징) (0) | 2019.04.15 |
변수 조작하기 (0) | 2019.04.10 |
데이터 파악하기 (0) | 2019.04.09 |
외부 데이터로 데이터프레임 만들기 (0) | 2019.03.30 |