R-Studio Dplyr Part.1

R-Studio의 Dplyr를 이용한 데이터 필터 Part.1

Featured image

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
>