4.4 filter() 함수를 이용한 행의 선택

4.4.1 filter() 함수의 기본 형식

filter(dataframe, filter condition 1, filter condition 2, …)

  • dataframe : 데이터 세트

  • filter condition : &(AND) 조건으로 행의 부분집합 선택. 조건을 컴마(‘,’)로 구분

4.4.2 단일 조건에 의한 행의 선택

Cars93_1 데이터 프레임에 차종(Type)별로 보면 Compact 차종이 총 16개 있음을 알 수 있습니다.

# number of cars by `Type` 
table(Cars93_1$Type)
## 
## Compact   Large Midsize   Small  Sporty     Van 
##      16      11      22      21      14       9
# filter() : select a subset of rows in a data frame
filter(Cars93_1, Type == c("Compact"))
##     Manufacturer    Model    Type Min.Price Price Max.Price MPG.city
## 1           Audi       90 Compact      25.9  29.1      32.3       20
## 2      Chevrolet Cavalier Compact       8.5  13.4      18.3       25
## 3      Chevrolet  Corsica Compact      11.4  11.4      11.4       25
## 4       Chrysler  LeBaron Compact      14.5  15.8      17.1       23
## 5          Dodge   Spirit Compact      11.9  13.3      14.7       22
## 6           Ford    Tempo Compact      10.4  11.3      12.2       22
## 7          Honda   Accord Compact      13.8  17.5      21.2       24
## 8          Mazda      626 Compact      14.3  16.5      18.7       26
## 9  Mercedes-Benz     190E Compact      29.0  31.9      34.9       20
## 10        Nissan   Altima Compact      13.0  15.7      18.3       24
## 11    Oldsmobile  Achieva Compact      13.0  13.5      14.0       24
## 12       Pontiac  Sunbird Compact       9.4  11.1      12.8       23
## 13          Saab      900 Compact      20.3  28.7      37.1       20
## 14        Subaru   Legacy Compact      16.3  19.5      22.7       23
## 15    Volkswagen   Passat Compact      17.6  20.0      22.4       21
## 16         Volvo      240 Compact      21.8  22.7      23.5       21
##    MPG.highway
## 1           26
## 2           36
## 3           34
## 4           28
## 5           27
## 6           27
## 7           31
## 8           34
## 9           29
## 10          30
## 11          31
## 12          31
## 13          26
## 14          30
## 15          30
## 16          28

4.4.3 복수 조건을 AND(,)로 결합한 행의 선택

행을 선택하는 조건이 여러 개이면 동시에 만족해야 하는 경우는 AND 연산에 의한 조건 결합으로 행을 선택한다. 예를 들어, 차종(Type)이 “Compact”이면서(Type == c(“Compact”)) , 최대가격(Max.Price)이 20 백$ 이하이고 (Max.Price <-20), 고속도로 연비(MPG.highway) 가 30 이상 (MPG.highway > 30)인 관측치를 선택해 보자. 이 경우는 3개의 행 선택 조건이 모두 AND로 결합되는 것이다. 이때에는 이들 세 개의 조건식을 컴마(,)로 구분해 주면 된다.

따라서 위의 문제를 dplyrfilter() 함수를 사용하여 나타내면 다음과 같다. 참고로, subset() 함수의 subset()과 동일한 기능을 한다.

# filter() : select a subset of rows in a data frame
filter(Cars93_1, Type == c("Compact"), Max.Price <= 20, MPG.highway >= 30)
##   Manufacturer    Model    Type Min.Price Price Max.Price MPG.city MPG.highway
## 1    Chevrolet Cavalier Compact       8.5  13.4      18.3       25          36
## 2    Chevrolet  Corsica Compact      11.4  11.4      11.4       25          34
## 3        Mazda      626 Compact      14.3  16.5      18.7       26          34
## 4       Nissan   Altima Compact      13.0  15.7      18.3       24          30
## 5   Oldsmobile  Achieva Compact      13.0  13.5      14.0       24          31
## 6      Pontiac  Sunbird Compact       9.4  11.1      12.8       23          31
# 또는
Cars93_1 %>%
    filter(Type == c("Compact"), Max.Price <= 20, MPG.highway >= 30)
##   Manufacturer    Model    Type Min.Price Price Max.Price MPG.city MPG.highway
## 1    Chevrolet Cavalier Compact       8.5  13.4      18.3       25          36
## 2    Chevrolet  Corsica Compact      11.4  11.4      11.4       25          34
## 3        Mazda      626 Compact      14.3  16.5      18.7       26          34
## 4       Nissan   Altima Compact      13.0  15.7      18.3       24          30
## 5   Oldsmobile  Achieva Compact      13.0  13.5      14.0       24          31
## 6      Pontiac  Sunbird Compact       9.4  11.1      12.8       23          31
  • 세 개의 조건을 동시에 만족하는 관측치의 갯수는 6개임을 알 수 있다.

4.4.4 복수 조건을 OR(|)로 결합한 행의 선택

filter(dataframe, filter condition 1 | filter condition 2 | …)

  • dataframe : 데이터 세트
  • filter condition 1 : 선택 조건 1
  • |: OR 조건 연산자

OR(또는) 조건으로 부분집합을 선별하려면 |를 사용한다. (subset() 함수와 동일)

Cars93_1 데이터 세트의 차종(Type)이 “Compact”이거나(|: OR), 최대가격(Max.Price)이 20 백$ 이하이거나(|, OR) 고속도로 연비(MPG.highway) 가 30 이상인 관측치 (행)을 선택해 보자. 즉, 3개의 검색 조건 중 하나라도 만족하면 그 행은 선택이 된다. 이때 이들 조건들을 OR 연산자인 |를 사용하여 결합하다.

위의 문제는 dplyrfilter() 함수를 사용하면 다음과 같이 된다.

# filter(dataframe, condition1 | condition2) : or 
filter(Cars93_1, Type == c("Compact") | Max.Price <= 20 | MPG.highway >= 30)
##     Manufacturer         Model    Type Min.Price Price Max.Price MPG.city
## 1          Acura       Integra   Small      12.9  15.9      18.8       25
## 2           Audi            90 Compact      25.9  29.1      32.3       20
## 3            BMW          535i Midsize      23.7  30.0      36.2       22
## 4          Buick       Century Midsize      14.2  15.7      17.3       22
## 5      Chevrolet      Cavalier Compact       8.5  13.4      18.3       25
## 6      Chevrolet       Corsica Compact      11.4  11.4      11.4       25
## 7      Chevrolet        Camaro  Sporty      13.4  15.1      16.8       19
## 8      Chevrolet        Lumina Midsize      13.4  15.9      18.4       21
## 9      Chevrolet    Lumina_APV     Van      14.7  16.3      18.0       18
## 10     Chevrolet         Astro     Van      14.7  16.6      18.6       15
## 11     Chevrolet       Caprice   Large      18.0  18.8      19.6       17
## 12      Chrylser      Concorde   Large      18.4  18.4      18.4       20
## 13      Chrysler       LeBaron Compact      14.5  15.8      17.1       23
## 14         Dodge          Colt   Small       7.9   9.2      10.6       29
## 15         Dodge        Shadow   Small       8.4  11.3      14.2       23
## 16         Dodge        Spirit Compact      11.9  13.3      14.7       22
## 17         Dodge       Dynasty Midsize      14.8  15.6      16.4       21
## 18         Eagle        Summit   Small       7.9  12.2      16.5       29
## 19          Ford       Festiva   Small       6.9   7.4       7.9       31
## 20          Ford        Escort   Small       8.4  10.1      11.9       23
## 21          Ford         Tempo Compact      10.4  11.3      12.2       22
## 22          Ford         Probe  Sporty      12.8  14.0      15.2       24
## 23          Ford        Taurus Midsize      15.6  20.2      24.8       21
## 24           Geo         Metro   Small       6.7   8.4      10.0       46
## 25           Geo         Storm  Sporty      11.5  12.5      13.5       30
## 26         Honda       Prelude  Sporty      17.0  19.8      22.7       24
## 27         Honda         Civic   Small       8.4  12.1      15.8       42
## 28         Honda        Accord Compact      13.8  17.5      21.2       24
## 29       Hyundai         Excel   Small       6.8   8.0       9.2       29
## 30       Hyundai       Elantra   Small       9.0  10.0      11.0       22
## 31       Hyundai        Scoupe  Sporty       9.1  10.0      11.0       26
## 32       Hyundai        Sonata Midsize      12.4  13.9      15.3       20
## 33         Mazda           323   Small       7.4   8.3       9.1       29
## 34         Mazda       Protege   Small      10.9  11.6      12.3       28
## 35         Mazda           626 Compact      14.3  16.5      18.7       26
## 36 Mercedes-Benz          190E Compact      29.0  31.9      34.9       20
## 37       Mercury         Capri  Sporty      13.3  14.1      15.0       23
## 38       Mercury        Cougar Midsize      14.9  14.9      14.9       19
## 39    Mitsubishi        Mirage   Small       7.7  10.3      12.9       29
## 40        Nissan        Sentra   Small       8.7  11.8      14.9       29
## 41        Nissan        Altima Compact      13.0  15.7      18.3       24
## 42    Oldsmobile       Achieva Compact      13.0  13.5      14.0       24
## 43    Oldsmobile Cutlass_Ciera Midsize      14.2  16.3      18.4       23
## 44    Oldsmobile    Silhouette     Van      19.5  19.5      19.5       18
## 45      Plymouth         Laser  Sporty      11.4  14.4      17.4       23
## 46       Pontiac        LeMans   Small       8.2   9.0       9.9       31
## 47       Pontiac       Sunbird Compact       9.4  11.1      12.8       23
## 48          Saab           900 Compact      20.3  28.7      37.1       20
## 49        Saturn            SL   Small       9.2  11.1      12.9       28
## 50        Subaru         Justy   Small       7.3   8.4       9.5       33
## 51        Subaru        Loyale   Small      10.5  10.9      11.3       25
## 52        Subaru        Legacy Compact      16.3  19.5      22.7       23
## 53        Suzuki         Swift   Small       7.3   8.6      10.0       39
## 54        Toyota        Tercel   Small       7.8   9.8      11.8       32
## 55        Toyota        Celica  Sporty      14.2  18.4      22.6       25
## 56    Volkswagen           Fox   Small       8.7   9.1       9.5       25
## 57    Volkswagen        Passat Compact      17.6  20.0      22.4       21
## 58         Volvo           240 Compact      21.8  22.7      23.5       21
##    MPG.highway
## 1           31
## 2           26
## 3           30
## 4           31
## 5           36
## 6           34
## 7           28
## 8           29
## 9           23
## 10          20
## 11          26
## 12          28
## 13          28
## 14          33
## 15          29
## 16          27
## 17          27
## 18          33
## 19          33
## 20          30
## 21          27
## 22          30
## 23          30
## 24          50
## 25          36
## 26          31
## 27          46
## 28          31
## 29          33
## 30          29
## 31          34
## 32          27
## 33          37
## 34          36
## 35          34
## 36          29
## 37          26
## 38          26
## 39          33
## 40          33
## 41          30
## 42          31
## 43          31
## 44          23
## 45          30
## 46          41
## 47          31
## 48          26
## 49          38
## 50          37
## 51          30
## 52          30
## 53          43
## 54          37
## 55          32
## 56          33
## 57          30
## 58          28
# 또는
Cars93_1 %>%
    filter(Type == c("Compact") | Max.Price <= 20 | MPG.highway >= 30)
##     Manufacturer         Model    Type Min.Price Price Max.Price MPG.city
## 1          Acura       Integra   Small      12.9  15.9      18.8       25
## 2           Audi            90 Compact      25.9  29.1      32.3       20
## 3            BMW          535i Midsize      23.7  30.0      36.2       22
## 4          Buick       Century Midsize      14.2  15.7      17.3       22
## 5      Chevrolet      Cavalier Compact       8.5  13.4      18.3       25
## 6      Chevrolet       Corsica Compact      11.4  11.4      11.4       25
## 7      Chevrolet        Camaro  Sporty      13.4  15.1      16.8       19
## 8      Chevrolet        Lumina Midsize      13.4  15.9      18.4       21
## 9      Chevrolet    Lumina_APV     Van      14.7  16.3      18.0       18
## 10     Chevrolet         Astro     Van      14.7  16.6      18.6       15
## 11     Chevrolet       Caprice   Large      18.0  18.8      19.6       17
## 12      Chrylser      Concorde   Large      18.4  18.4      18.4       20
## 13      Chrysler       LeBaron Compact      14.5  15.8      17.1       23
## 14         Dodge          Colt   Small       7.9   9.2      10.6       29
## 15         Dodge        Shadow   Small       8.4  11.3      14.2       23
## 16         Dodge        Spirit Compact      11.9  13.3      14.7       22
## 17         Dodge       Dynasty Midsize      14.8  15.6      16.4       21
## 18         Eagle        Summit   Small       7.9  12.2      16.5       29
## 19          Ford       Festiva   Small       6.9   7.4       7.9       31
## 20          Ford        Escort   Small       8.4  10.1      11.9       23
## 21          Ford         Tempo Compact      10.4  11.3      12.2       22
## 22          Ford         Probe  Sporty      12.8  14.0      15.2       24
## 23          Ford        Taurus Midsize      15.6  20.2      24.8       21
## 24           Geo         Metro   Small       6.7   8.4      10.0       46
## 25           Geo         Storm  Sporty      11.5  12.5      13.5       30
## 26         Honda       Prelude  Sporty      17.0  19.8      22.7       24
## 27         Honda         Civic   Small       8.4  12.1      15.8       42
## 28         Honda        Accord Compact      13.8  17.5      21.2       24
## 29       Hyundai         Excel   Small       6.8   8.0       9.2       29
## 30       Hyundai       Elantra   Small       9.0  10.0      11.0       22
## 31       Hyundai        Scoupe  Sporty       9.1  10.0      11.0       26
## 32       Hyundai        Sonata Midsize      12.4  13.9      15.3       20
## 33         Mazda           323   Small       7.4   8.3       9.1       29
## 34         Mazda       Protege   Small      10.9  11.6      12.3       28
## 35         Mazda           626 Compact      14.3  16.5      18.7       26
## 36 Mercedes-Benz          190E Compact      29.0  31.9      34.9       20
## 37       Mercury         Capri  Sporty      13.3  14.1      15.0       23
## 38       Mercury        Cougar Midsize      14.9  14.9      14.9       19
## 39    Mitsubishi        Mirage   Small       7.7  10.3      12.9       29
## 40        Nissan        Sentra   Small       8.7  11.8      14.9       29
## 41        Nissan        Altima Compact      13.0  15.7      18.3       24
## 42    Oldsmobile       Achieva Compact      13.0  13.5      14.0       24
## 43    Oldsmobile Cutlass_Ciera Midsize      14.2  16.3      18.4       23
## 44    Oldsmobile    Silhouette     Van      19.5  19.5      19.5       18
## 45      Plymouth         Laser  Sporty      11.4  14.4      17.4       23
## 46       Pontiac        LeMans   Small       8.2   9.0       9.9       31
## 47       Pontiac       Sunbird Compact       9.4  11.1      12.8       23
## 48          Saab           900 Compact      20.3  28.7      37.1       20
## 49        Saturn            SL   Small       9.2  11.1      12.9       28
## 50        Subaru         Justy   Small       7.3   8.4       9.5       33
## 51        Subaru        Loyale   Small      10.5  10.9      11.3       25
## 52        Subaru        Legacy Compact      16.3  19.5      22.7       23
## 53        Suzuki         Swift   Small       7.3   8.6      10.0       39
## 54        Toyota        Tercel   Small       7.8   9.8      11.8       32
## 55        Toyota        Celica  Sporty      14.2  18.4      22.6       25
## 56    Volkswagen           Fox   Small       8.7   9.1       9.5       25
## 57    Volkswagen        Passat Compact      17.6  20.0      22.4       21
## 58         Volvo           240 Compact      21.8  22.7      23.5       21
##    MPG.highway
## 1           31
## 2           26
## 3           30
## 4           31
## 5           36
## 6           34
## 7           28
## 8           29
## 9           23
## 10          20
## 11          26
## 12          28
## 13          28
## 14          33
## 15          29
## 16          27
## 17          27
## 18          33
## 19          33
## 20          30
## 21          27
## 22          30
## 23          30
## 24          50
## 25          36
## 26          31
## 27          46
## 28          31
## 29          33
## 30          29
## 31          34
## 32          27
## 33          37
## 34          36
## 35          34
## 36          29
## 37          26
## 38          26
## 39          33
## 40          33
## 41          30
## 42          31
## 43          31
## 44          23
## 45          30
## 46          41
## 47          31
## 48          26
## 49          38
## 50          37
## 51          30
## 52          30
## 53          43
## 54          37
## 55          32
## 56          33
## 57          30
## 58          28
  • 위의 3가지 조건을 OR로 만족시키는 관측치의 갯수는 58개 임을 알 수 있다.

4.4.5 행의 위치를 지정해서 행의 데이터 부분집합 선택

slice(dataframe, from, to)

  • dataframe: 데이터 세트

  • from : 시작 위치

  • to : 마지막 위치

filter()가 조건에 의한 행의 선택이었다면, 위치(position)를 사용한 행의 선택을 위해서는 slice() 함수를 사용한다.

Cars93_1 데이터 세트의 6번째에서 10번째 행(row)의 데이터를 선택해 보자.

# slice() : select rows by position 
slice(Cars93_1, 6:10)
##   Manufacturer      Model    Type Min.Price Price Max.Price MPG.city
## 1        Buick    Century Midsize      14.2  15.7      17.3       22
## 2        Buick    LeSabre   Large      19.9  20.8      21.7       19
## 3        Buick Roadmaster   Large      22.6  23.7      24.9       16
## 4        Buick    Riviera Midsize      26.3  26.3      26.3       19
## 5     Cadillac    DeVille   Large      33.0  34.7      36.3       16
##   MPG.highway
## 1          31
## 2          28
## 3          25
## 4          27
## 5          25
# 또는
Cars93_1 %>%
  slice(6:10)
##   Manufacturer      Model    Type Min.Price Price Max.Price MPG.city
## 1        Buick    Century Midsize      14.2  15.7      17.3       22
## 2        Buick    LeSabre   Large      19.9  20.8      21.7       19
## 3        Buick Roadmaster   Large      22.6  23.7      24.9       16
## 4        Buick    Riviera Midsize      26.3  26.3      26.3       19
## 5     Cadillac    DeVille   Large      33.0  34.7      36.3       16
##   MPG.highway
## 1          31
## 2          28
## 3          25
## 4          27
## 5          25
  • 6번쨰 행부터 10번쨰 행까지를 선택하게 된다.