데이터 전처리
dyplr은 데이터 전처리 작업에 가장 많이 사용되는 패키지이다.
exam %>% filter(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
여기서 %>%는 파이프 연산자로 왼쪽의 결과를 오른쪽 함수로 전달하라는 뜻을 가지고 있다. filter()에 조건은 '같다'라는 의미를 가지는 '=='도 가능하지만 '같지 않다'라는 '!='도 가능하며 부등호도 쓸 수 있다.
AND, OR 같은 조건도 filter() 안에서 사용할 수 있다.
class == 1 & math >= 50 : 1반이면서, 수학 점수가 50점 이상인 경우
math >= 90 | english >= 90 : 수학 점수가 90점 이상이거나 영어 점수가 90점 이상인 경우
추가로, class == 1 | class == 2 | class == 3과 같이 코드가 길어질 때느 &in&를 활용하여 코드를 간편하게 작성할 수 있다.
exam %>% filter(class %in% c(1, 3, 5)) # 1, 3, 5반에 해당하면 추출
다음은 select()이다. 데이터에 들어 있는 변수 중에 일부 변수만 추출해서 활용할 때 사용한다.
exam %>% select(math) # math만 추출
# 출력값
> exam %>% select(math)
math
1 50
2 60
3 45
4 30
5 25
6 50
7 80
8 90
...
exam %>% select(math, english) # 여러 변수 추출
exam %>% select(-math) # math를 제외하고 추출
exam %>% filter(class == 1) %>% select(math) # class가 1인 행만 추출한 다음 english 추출
그 외에도 여러 변수를 추출하거나 특정 변수를 제외하는 등 다양하게 응용이 가능하다.
arrange() 같은 경우는 데이터를 정렬하기 위해서 쓰인다. desc를 활용하면 내림차순 정렬이 가능하다.
exam %>% arrange(math) # math 오름차순 정렬
# 출력값
> exam %>% arrange(math)
id class math english science
1 9 3 20 98 15
2 5 2 25 80 65
3 4 1 30 98 58
4 3 1 45 86 78
5 12 3 45 85 32
6 13 4 46 98 65
...
exam %>% arrange(desc(math)) # math 내림차순 정렬
exam %>% arrange(math, class) # class 및 math 오름차순 정렬
mutate() 같은 경우는 파생 변수를 만들어 추가할 때 사용한다. 마찬가지로 () 안에 쉼표(,)로 변수를 구분하면 여러 파생변수를 한 번에 추가할 수 있고 ifelse()를 활용하면 조건에 따른 다른 값을 부여할 수 있다.
exam %>% mutate(total = math + english + science) %>% # 총합 변수 추가
head # 일부 추출
# 출력값
id class math english science total
1 1 1 50 98 50 198
2 2 1 60 97 60 217
3 3 1 45 86 78 209
4 4 1 30 98 58 186
5 5 2 25 80 65 170
6 6 2 50 89 98 237
exam %>% mutate(test = ifelse(science >= 60, "pass", "fail")) %>% # 조건에 따른 변수 추가 부여
head # 일부 추출
# 출력값
> exam %>% mutate(test = ifelse(science >= 60, "pass", "fail")) %>%
+ head
id class math english science test
1 1 1 50 98 50 fail
2 2 1 60 97 60 pass
3 3 1 45 86 78 pass
4 4 1 30 98 58 fail
5 5 2 25 80 65 pass
6 6 2 50 89 98 pass
요약을 할 때는 group_by()나 summarise()을 사용한다.
exam %>% summarise(mean_math = mean(math)) # 수학 평균 산출
# 출력값
mean_math
1 57.45
exam %>% group_by(class) %>% summarise(mean_math = mean(math)) # class별 math 평균
#출력값
# A tibble: 5 × 2
class mean_math
<int> <dbl>
1 1 46.2
2 2 61.2
3 3 45
4 4 56.8
5 5 78
그 외에도 Dataframe을 합치는 함수도 있다. 기존의 데이터에 열을 추가할 때는 left_join을 사용하고 행을 추가할 때는 bind_row()을 사용한다.
# 중간고사 데이터 생성
test1 <- data.frame(id = c(1, 2, 3, 4, 5), mid = c(1, 2, 3, 4, 8))
test2 <- data.frame(id = c(1, 2, 3, 4, 5), fin = c(1, 2, 3, 4, 8))
# id를 기준으로 합치기
total <- left_join(test1, test2, by = "id")
total
# 출력값
id mid fin
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 8 8
# group1, 2 변수 생성
group1 <- data.frame(id = c(1, 2, 3, 4, 5), mid = c(1, 2, 3, 4, 8))
group2 <- data.frame(id = c(6, 7, 8, 9, 10), mid = c(1, 2, 3, 4, 8))
# group_all로 합치기
group_all <- bind_rows(group1, group2)
group_all
# 출력값
id mid
1 1 1
2 2 2
3 3 3
4 4 4
5 5 8
6 6 1
7 7 2
8 8 3
9 9 4
10 10 8
'My Work > Data Literacy' 카테고리의 다른 글
R 공부 (5편) - 쉽게 배우는 R 데이터 분석 (2) | 2024.07.15 |
---|---|
R 공부 (4편) - 쉽게 배우는 R 데이터 분석 (1) | 2024.07.14 |
R 공부 (2편) - 쉽게 배우는 R 데이터 분석 (0) | 2024.07.05 |
R 공부 (1편) - 쉽게 배우는 R 데이터 분석 (0) | 2024.07.03 |
프로그래머스 연습문제 풀이 (0) | 2023.12.09 |