43 min to read
R-Studio Dplyr Part.1
R-Studio의 Dplyr를 이용한 데이터 필터 Part.1
R-Studio 의 정규식
SQL 처럼 다루게 해줍니다!
파일 소스
우클릭 -> 다른이름으로 링크저장 이용해 주세요
jumsu.csv
R정형데이터처리하기.xlsx
progbook.csv
함수 예제
# library(dplyr)
# students <- read.csv("jumsu.csv")
# head(students)
#
# students에서 ban가 1인 경우만 출력하세요.
students <- read.csv("jumsu.csv")
ban1 <- filter(students, students$ban == 1)
ban1
# students에서 3반이 아닌 경우만 출력하세요.
ban_Not_3 <- filter(students, students$ban != 3)
ban_Not_3
# 국어 점수가 50점을 초과한 경우만 출력하세요.
kor_Over_50 <- students %>% filter(students$kor>50)
kor_Over_50
# 영어 점수가 80점 이하인 경우만 출력하세요.
eng_Under_80 <- students %>% filter(students$eng<=80)
eng_Under_80
# 1반이면서 국어 점수가 50점 이상인 경우만 출력하세요.
userCon01 <- students %>% filter((students$ban==1) & (students$kor>=50))
userCon01
# 국어 점수가 90점 이상이거나 영어 점수가 90점 이상인 경우만 출력하세요.
userCon02 <- students %>% filter((students$kor>=90) & (students$eng>=90))
userCon02
# 영어 점수가 90점 미만이거나 수학 점수가 50점 미만인 경우
userCon03 <- students %>% filter((students$eng<90) & (students$math<50))
userCon03
# # %in% 기호를 사용하면 코드를 좀 더 간결하게 작성할 수 있다.
# # %in% 기호와 c() 함수를 이용해 조건 목록을 입력하면 된다.
#
# # 1, 3, 5반 학생들 정보를 출력하시오.
useIn01 <- students %>% filter(ban %in% c(1, 3, 5))
useIn01
# 1반 학생들 정보를 변수 ban1에 저장하시오.
ban1 <- students %>% filter(ban == 1)
ban1
# 2반 학생들 정보를 변수 ban2에 저장하시오.
ban2 <- students %>% filter(ban == 2)
ban2
# 변수 ban1의 국어 점수 평균을 구하시오.
ban1AvgKor <- ban1 %>% summarise(average=mean(kor, na.rm = T))
ban1AvgKor
# 변수 ban2의 영어 점수 평균을 구하시오.
ban2AvgEng <- ban2 %>% summarise(average=mean(eng, na.rm = T))
ban2AvgEng
# kor 컬럼만 추출하시오.
showKorFromStu <- students %>% select(kor)
showKorFromStu
# ban, kor, eng 컬럼을 추출하시오.
showBkeFromStu <- students %>% select(ban, kor, eng)
showBkeFromStu
# kor, eng 컬럼을 제외하고 나머지 컬럼만 추출하시오.
showBkeFromStu <- students %>% select(-c("ban", "kor", "eng"))
showBkeFromStu
# 1반 학생들의 eng 컬럼만 추출하시오.
showBan1Eng <- students %>% filter(ban==1) %>% select(eng)
showBan1Eng
# id, kor 추출하되, 앞부분 10행까지만 추출하시오.
# 힌트 : head() 함수도 사용할 수 있다.
showIdkor <- students %>% select(id, kor)
head(showIdkor, 10)
# 국어 점수를 이용하여 오름차순으로 정렬하시오.
korAsc <- students %>% select(kor) %>% arrange(kor)
korAsc
# 영어 점수를 이용하여 내림차순으로 정렬하시오.
engDesc <- students %>% select(eng) %>% arrange(desc(eng))
engDesc
# 반(ban)별 오름차순 정렬 후, 국어(kor) 점수별로 내림차순 정렬하시오.
banSort01 <- students %>% arrange(ban, desc(kor))
banSort01
# 총점 컬럼을 만들어 보세요.
# 총점(total) = kor + eng + math
students <- students %>% mutate(total = kor+eng+math)
students
# 평균 컬럼을 만들어 보세요.
# 평균(average) = total / 3
students <- students %>% mutate(avg = total/3)
students
# result 컬럼을 만들어 보세요.
# result 컬럼은 수학 점수가 60이상이면 pass, 아니면 fail이라는 값을 저장해야 한다.
# 힌트 : ifelse 함수를 사용하면 된다.
students <- students %>% mutate(result = ifelse(math>=60, "pass", "fail"))
students
# 총합 컬럼 기준으로 오름차순 정렬하시오
totalAsc <- students %>% arrange(total)
totalAsc
# 국어 점수의 평균을 구한 후 mean_kor이라는 새로운 변수에 값을 할당해 보세요.
mean_Kor <- students %>% summarise(average=mean(kor, na.rm = T))
mean_Kor
# 반별로 국어 점수의 평균과 영어 점수의 총합 및 학생 수를 구해 보세요(힌트 : n() 함수)
userAllCon <- students %>% group_by(ban) %>% summarise(국어평균=mean(kor, na.rm = T), 영어총점=sum(eng, na.rm = T), 총학생수 = n())
userAllCon
콘솔 결과
> # library(dplyr)
> # students <- read.csv("jumsu.csv")
> # head(students)
> #
> # students에서 ban가 1인 경우만 출력하세요.
> students <- read.csv("jumsu.csv")
> ban1 <- filter(students, students$ban == 1)
> ban1
id ban kor eng math
1 1 1 45 71 32
2 2 1 58 73 54
3 3 1 39 91 37
4 4 1 44 28 88
>
> # students에서 3반이 아닌 경우만 출력하세요.
> ban_Not_3 <- filter(students, students$ban != 3)
> ban_Not_3
id ban kor eng math
1 1 1 45 71 32
2 2 1 58 73 54
3 3 1 39 91 37
4 4 1 44 28 88
5 5 2 35 66 49
6 6 2 65 79 96
7 7 2 90 89 20
8 8 2 25 82 98
9 13 4 68 33 43
10 14 4 90 58 50
11 15 4 17 14 88
12 16 4 17 54 99
13 17 5 11 91 51
14 18 5 73 85 94
15 19 5 19 12 55
16 20 5 90 31 69
>
> # 국어 점수가 50점을 초과한 경우만 출력하세요.
> kor_Over_50 <- students %>% filter(students$kor>50)
> kor_Over_50
id ban kor eng math
1 2 1 58 73 54
2 6 2 65 79 96
3 7 2 90 89 20
4 9 3 87 98 59
5 10 3 84 21 56
6 11 3 66 25 89
7 13 4 68 33 43
8 14 4 90 58 50
9 18 5 73 85 94
10 20 5 90 31 69
>
> # 영어 점수가 80점 이하인 경우만 출력하세요.
> eng_Under_80 <- students %>% filter(students$eng<=80)
> eng_Under_80
id ban kor eng math
1 1 1 45 71 32
2 2 1 58 73 54
3 4 1 44 28 88
4 5 2 35 66 49
5 6 2 65 79 96
6 10 3 84 21 56
7 11 3 66 25 89
8 12 3 48 50 90
9 13 4 68 33 43
10 14 4 90 58 50
11 15 4 17 14 88
12 16 4 17 54 99
13 19 5 19 12 55
14 20 5 90 31 69
>
> # 1반이면서 국어 점수가 50점 이상인 경우만 출력하세요.
> userCon01 <- students %>% filter((students$ban==1) & (students$kor>=50))
> userCon01
id ban kor eng math
1 2 1 58 73 54
>
> # 국어 점수가 90점 이상이거나 영어 점수가 90점 이상인 경우만 출력하세요.
> userCon02 <- students %>% filter((students$kor>=90) & (students$eng>=90))
> userCon02
[1] id ban kor eng math
<0 행> <또는 row.names의 길이가 0입니다>
>
> # 영어 점수가 90점 미만이거나 수학 점수가 50점 미만인 경우
> userCon03 <- students %>% filter((students$eng<90) & (students$math<50))
> userCon03
id ban kor eng math
1 1 1 45 71 32
2 5 2 35 66 49
3 7 2 90 89 20
4 13 4 68 33 43
>
> # # %in% 기호를 사용하면 코드를 좀 더 간결하게 작성할 수 있다.
> # # %in% 기호와 c() 함수를 이용해 조건 목록을 입력하면 된다.
> #
> # # 1, 3, 5반 학생들 정보를 출력하시오.
> useIn01 <- students %>% filter(ban %in% c(1, 3, 5))
> useIn01
id ban kor eng math
1 1 1 45 71 32
2 2 1 58 73 54
3 3 1 39 91 37
4 4 1 44 28 88
5 9 3 87 98 59
6 10 3 84 21 56
7 11 3 66 25 89
8 12 3 48 50 90
9 17 5 11 91 51
10 18 5 73 85 94
11 19 5 19 12 55
12 20 5 90 31 69
>
> # 1반 학생들 정보를 변수 ban1에 저장하시오.
> ban1 <- students %>% filter(ban == 1)
> ban1
id ban kor eng math
1 1 1 45 71 32
2 2 1 58 73 54
3 3 1 39 91 37
4 4 1 44 28 88
>
> # 2반 학생들 정보를 변수 ban2에 저장하시오.
> ban2 <- students %>% filter(ban == 2)
> ban2
id ban kor eng math
1 5 2 35 66 49
2 6 2 65 79 96
3 7 2 90 89 20
4 8 2 25 82 98
>
> # 변수 ban1의 국어 점수 평균을 구하시오.
> ban1AvgKor <- ban1 %>% summarise(average=mean(kor, na.rm = T))
> ban1AvgKor
average
1 46.5
>
> # 변수 ban2의 영어 점수 평균을 구하시오.
> ban2AvgEng <- ban2 %>% summarise(average=mean(eng, na.rm = T))
> ban2AvgEng
average
1 79
>
> # kor 컬럼만 추출하시오.
> showKorFromStu <- students %>% select(kor)
> showKorFromStu
kor
1 45
2 58
3 39
4 44
5 35
6 65
7 90
8 25
9 87
10 84
11 66
12 48
13 68
14 90
15 17
16 17
17 11
18 73
19 19
20 90
>
> # ban, kor, eng 컬럼을 추출하시오.
> showBkeFromStu <- students %>% select(ban, kor, eng)
> showBkeFromStu
ban kor eng
1 1 45 71
2 1 58 73
3 1 39 91
4 1 44 28
5 2 35 66
6 2 65 79
7 2 90 89
8 2 25 82
9 3 87 98
10 3 84 21
11 3 66 25
12 3 48 50
13 4 68 33
14 4 90 58
15 4 17 14
16 4 17 54
17 5 11 91
18 5 73 85
19 5 19 12
20 5 90 31
>
> # kor, eng 컬럼을 제외하고 나머지 컬럼만 추출하시오.
> showBkeFromStu <- students %>% select(-c("ban", "kor", "eng"))
> showBkeFromStu
id math
1 1 32
2 2 54
3 3 37
4 4 88
5 5 49
6 6 96
7 7 20
8 8 98
9 9 59
10 10 56
11 11 89
12 12 90
13 13 43
14 14 50
15 15 88
16 16 99
17 17 51
18 18 94
19 19 55
20 20 69
>
> # 1반 학생들의 eng 컬럼만 추출하시오.
> showBan1Eng <- students %>% filter(ban==1) %>% select(eng)
> showBan1Eng
eng
1 71
2 73
3 91
4 28
>
> # id, kor 추출하되, 앞부분 10행까지만 추출하시오.
> # 힌트 : head() 함수도 사용할 수 있다.
> showIdkor <- students %>% select(id, kor)
> head(showIdkor, 10)
id kor
1 1 45
2 2 58
3 3 39
4 4 44
5 5 35
6 6 65
7 7 90
8 8 25
9 9 87
10 10 84
>
> # 국어 점수를 이용하여 오름차순으로 정렬하시오.
> korAsc <- students %>% select(kor) %>% arrange(kor)
> korAsc
kor
1 11
2 17
3 17
4 19
5 25
6 35
7 39
8 44
9 45
10 48
11 58
12 65
13 66
14 68
15 73
16 84
17 87
18 90
19 90
20 90
>
> # 영어 점수를 이용하여 내림차순으로 정렬하시오.
> engDesc <- students %>% select(eng) %>% arrange(desc(eng))
> engDesc
eng
1 98
2 91
3 91
4 89
5 85
6 82
7 79
8 73
9 71
10 66
11 58
12 54
13 50
14 33
15 31
16 28
17 25
18 21
19 14
20 12
>
> # 반(ban)별 오름차순 정렬 후, 국어(kor) 점수별로 내림차순 정렬하시오.
> banSort01 <- students %>% arrange(ban, desc(kor))
> banSort01
id ban kor eng math
1 2 1 58 73 54
2 1 1 45 71 32
3 4 1 44 28 88
4 3 1 39 91 37
5 7 2 90 89 20
6 6 2 65 79 96
7 5 2 35 66 49
8 8 2 25 82 98
9 9 3 87 98 59
10 10 3 84 21 56
11 11 3 66 25 89
12 12 3 48 50 90
13 14 4 90 58 50
14 13 4 68 33 43
15 15 4 17 14 88
16 16 4 17 54 99
17 20 5 90 31 69
18 18 5 73 85 94
19 19 5 19 12 55
20 17 5 11 91 51
>
> # 총점 컬럼을 만들어 보세요.
> # 총점(total) = kor + eng + math
> students <- students %>% mutate(total = kor+eng+math)
> students
id ban kor eng math total
1 1 1 45 71 32 148
2 2 1 58 73 54 185
3 3 1 39 91 37 167
4 4 1 44 28 88 160
5 5 2 35 66 49 150
6 6 2 65 79 96 240
7 7 2 90 89 20 199
8 8 2 25 82 98 205
9 9 3 87 98 59 244
10 10 3 84 21 56 161
11 11 3 66 25 89 180
12 12 3 48 50 90 188
13 13 4 68 33 43 144
14 14 4 90 58 50 198
15 15 4 17 14 88 119
16 16 4 17 54 99 170
17 17 5 11 91 51 153
18 18 5 73 85 94 252
19 19 5 19 12 55 86
20 20 5 90 31 69 190
>
> # 평균 컬럼을 만들어 보세요.
> # 평균(average) = total / 3
> students <- students %>% mutate(avg = total/3)
> students
id ban kor eng math total avg
1 1 1 45 71 32 148 49.33333
2 2 1 58 73 54 185 61.66667
3 3 1 39 91 37 167 55.66667
4 4 1 44 28 88 160 53.33333
5 5 2 35 66 49 150 50.00000
6 6 2 65 79 96 240 80.00000
7 7 2 90 89 20 199 66.33333
8 8 2 25 82 98 205 68.33333
9 9 3 87 98 59 244 81.33333
10 10 3 84 21 56 161 53.66667
11 11 3 66 25 89 180 60.00000
12 12 3 48 50 90 188 62.66667
13 13 4 68 33 43 144 48.00000
14 14 4 90 58 50 198 66.00000
15 15 4 17 14 88 119 39.66667
16 16 4 17 54 99 170 56.66667
17 17 5 11 91 51 153 51.00000
18 18 5 73 85 94 252 84.00000
19 19 5 19 12 55 86 28.66667
20 20 5 90 31 69 190 63.33333
>
> # result 컬럼을 만들어 보세요.
> # result 컬럼은 수학 점수가 60이상이면 pass, 아니면 fail이라는 값을 저장해야 한다.
> # 힌트 : ifelse 함수를 사용하면 된다.
> students <- students %>% mutate(result = ifelse(math>=60, "pass", "fail"))
> students
id ban kor eng math total avg result
1 1 1 45 71 32 148 49.33333 fail
2 2 1 58 73 54 185 61.66667 fail
3 3 1 39 91 37 167 55.66667 fail
4 4 1 44 28 88 160 53.33333 pass
5 5 2 35 66 49 150 50.00000 fail
6 6 2 65 79 96 240 80.00000 pass
7 7 2 90 89 20 199 66.33333 fail
8 8 2 25 82 98 205 68.33333 pass
9 9 3 87 98 59 244 81.33333 fail
10 10 3 84 21 56 161 53.66667 fail
11 11 3 66 25 89 180 60.00000 pass
12 12 3 48 50 90 188 62.66667 pass
13 13 4 68 33 43 144 48.00000 fail
14 14 4 90 58 50 198 66.00000 fail
15 15 4 17 14 88 119 39.66667 pass
16 16 4 17 54 99 170 56.66667 pass
17 17 5 11 91 51 153 51.00000 fail
18 18 5 73 85 94 252 84.00000 pass
19 19 5 19 12 55 86 28.66667 fail
20 20 5 90 31 69 190 63.33333 pass
>
> # 총합 컬럼 기준으로 오름차순 정렬하시오
> totalAsc <- students %>% arrange(total)
> totalAsc
id ban kor eng math total avg result
1 19 5 19 12 55 86 28.66667 fail
2 15 4 17 14 88 119 39.66667 pass
3 13 4 68 33 43 144 48.00000 fail
4 1 1 45 71 32 148 49.33333 fail
5 5 2 35 66 49 150 50.00000 fail
6 17 5 11 91 51 153 51.00000 fail
7 4 1 44 28 88 160 53.33333 pass
8 10 3 84 21 56 161 53.66667 fail
9 3 1 39 91 37 167 55.66667 fail
10 16 4 17 54 99 170 56.66667 pass
11 11 3 66 25 89 180 60.00000 pass
12 2 1 58 73 54 185 61.66667 fail
13 12 3 48 50 90 188 62.66667 pass
14 20 5 90 31 69 190 63.33333 pass
15 14 4 90 58 50 198 66.00000 fail
16 7 2 90 89 20 199 66.33333 fail
17 8 2 25 82 98 205 68.33333 pass
18 6 2 65 79 96 240 80.00000 pass
19 9 3 87 98 59 244 81.33333 fail
20 18 5 73 85 94 252 84.00000 pass
>
> # 국어 점수의 평균을 구한 후 mean_kor이라는 새로운 변수에 값을 할당해 보세요.
> mean_Kor <- students %>% summarise(average=mean(kor, na.rm = T))
> mean_Kor
average
1 53.55
>
> # 반별로 국어 점수의 평균과 영어 점수의 총합 및 학생 수를 구해 보세요(힌트 : n() 함수)
> userAllCon <- students %>% group_by(ban) %>% summarise(국어평균=mean(kor, na.rm = T), 영어총점=sum(eng, na.rm = T), 총학생수 = n())
> userAllCon
# A tibble: 5 x 4
ban 국어평균 영어총점 총학생수
<int> <dbl> <int> <int>
1 1 46.5 263 4
2 2 53.8 316 4
3 3 71.2 194 4
4 4 48 159 4
5 5 48.2 219 4
>
Comments