2. select 함수 : 필요한 변수만 추출하기

exam <- read.csv("csv_exam.csv")
dplyr::glimpse(exam)
## Observations: 20
## Variables: 5
## $ id      <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## $ class   <int> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, ...
## $ math    <int> 50, 60, 45, 30, 25, 50, 80, 90, 20, 50, 65, 45, 46, 48...
## $ english <int> 98, 97, 86, 98, 80, 89, 90, 78, 98, 98, 65, 85, 98, 87...
## $ science <int> 50, 60, 78, 58, 65, 98, 45, 25, 15, 45, 65, 32, 65, 12...

(1) 변수 추출하기

exam %>% select(math)
##    math
## 1    50
## 2    60
## 3    45
## 4    30
## 5    25
## 6    50
## 7    80
## 8    90
## 9    20
## 10   50
## 11   65
## 12   45
## 13   46
## 14   48
## 15   75
## 16   58
## 17   65
## 18   80
## 19   89
## 20   78

(2) 여러변수 추출하기

exam %>% select(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
## 7      2   80      90
## 8      2   90      78
## 9      3   20      98
## 10     3   50      98
## 11     3   65      65
## 12     3   45      85
## 13     4   46      98
## 14     4   48      87
## 15     4   75      56
## 16     4   58      98
## 17     5   65      68
## 18     5   80      78
## 19     5   89      68
## 20     5   78      83

(3) 변수 제외하기

exam %>% select(-math)
##    id class english science
## 1   1     1      98      50
## 2   2     1      97      60
## 3   3     1      86      78
## 4   4     1      98      58
## 5   5     2      80      65
## 6   6     2      89      98
## 7   7     2      90      45
## 8   8     2      78      25
## 9   9     3      98      15
## 10 10     3      98      45
## 11 11     3      65      65
## 12 12     3      85      32
## 13 13     4      98      65
## 14 14     4      87      12
## 15 15     4      56      78
## 16 16     4      98      65
## 17 17     5      68      98
## 18 18     5      78      90
## 19 19     5      68      87
## 20 20     5      83      58

dplyr 함수 조합하기

(1) filter() 와 select() 조합하기

1반 학생의 영어점수 추출

exam %>% filter(class ==1) %>% select(english)
##   english
## 1      98
## 2      97
## 3      86
## 4      98

(2) 가독성있게 줄 바꾸기

exam %>%
  filter(class == 1) %>%
  select(english)
##   english
## 1      98
## 2      97
## 3      86
## 4      98

(3) 일부만 출력하기

  • 데이터 일부를 출력할 때 사용하는 head()를 dplyr 에 조합해 사용할 수 있음.
  • dplyr 구문의 마지막에 %>% 로 연결해 head를 입력
  • 괄호 없이 head 만 쓰면 6행까지 출력, 괄호안에 숫자를 입력하면 입력한 숫자만큼의 행이 출력
exam %>%
  select(id, math) %>%
  head
##   id math
## 1  1   50
## 2  2   60
## 3  3   45
## 4  4   30
## 5  5   25
## 6  6   50

mpg 데이터를 이용해서 문제 해결

Q1. mpg 데이터는 11개 변수로 구성되어 있습니다. 이 중 일부만 추출해 분석에 활용하려 합니다. mpg 데이터에서 class(자동차종류), cty(도시 연비) 변수를 추출해 새로운 데이터를 만드세요. 새로 만든 데이터의 일부를 출력해 두 변수로만 구성되어 있는지 확인하세요.

mpg <- as.data.frame(ggplot2::mpg)
mpg %>% select(class, cty) %>% head
##     class cty
## 1 compact  18
## 2 compact  21
## 3 compact  20
## 4 compact  21
## 5 compact  16
## 6 compact  18
mpg_1 <- mpg %>% select(class, cty)

**Q2. 자동차 종류에 따라 도시 연비가 다른지 알아보려 합니다. 앞에서 추출한 데이터를 이용해 class(자동차 종류)가 “suv”인 자동차와 “compact” 인 자동차 중 어떤 자동차의 cty(도시연비)가 높은지 알아보세요.

mpg_suv <- mpg_1 %>% filter(class == "suv")
mpg_com <- mpg_1 %>% filter(class == "compact")

mean(mpg_suv$cty)
## [1] 13.5
mean(mpg_com$cty)
## [1] 20.12766