4.5 arrange() 함수를 이용한 행의 정렬

4.5.1 arrange() 함수의 기본 형식

arrange(dataframe, order criterion 1, order criterion 2, ...)

  • dataframe : 데이터 세트
  • order criterion : 정렬 기준이 되는 컬럼 명(디폴트로 오름차순). 내림차순의 경우 desc(컬럼명)

데이터 프레임을 정렬할 때 arrange() 함수를 쓰면 매우 편리하다.

Cars93_1 데이터 프레임의 행들을 최고가격(Max.Price) 컬럼 기준으로 오름 차순으로 정렬해 보자.

# arrange() : reorder rows of data frame in ascending order
b1 <- arrange(Cars93_1, Max.Price)
head(b1)
##   Manufacturer   Model  Type Min.Price Price Max.Price MPG.city MPG.highway
## 1         Ford Festiva Small       6.9   7.4       7.9       31          33
## 2        Mazda     323 Small       7.4   8.3       9.1       29          37
## 3      Hyundai   Excel Small       6.8   8.0       9.2       29          33
## 4       Subaru   Justy Small       7.3   8.4       9.5       33          37
## 5   Volkswagen     Fox Small       8.7   9.1       9.5       25          33
## 6      Pontiac  LeMans Small       8.2   9.0       9.9       31          41
# 또는
b2 <- Cars93_1 %>%
   arrange(Max.Price)
head(b2)
##   Manufacturer   Model  Type Min.Price Price Max.Price MPG.city MPG.highway
## 1         Ford Festiva Small       6.9   7.4       7.9       31          33
## 2        Mazda     323 Small       7.4   8.3       9.1       29          37
## 3      Hyundai   Excel Small       6.8   8.0       9.2       29          33
## 4       Subaru   Justy Small       7.3   8.4       9.5       33          37
## 5   Volkswagen     Fox Small       8.7   9.1       9.5       25          33
## 6      Pontiac  LeMans Small       8.2   9.0       9.9       31          41

이제는 Cars93_1 데이터 프레임의 행들을 최고가격(Max.Price) 컬럼 기준으로 내림 차순으로 정렬해 보자.

# arrange() : reorder rows of data frame in descending order
b3 <- arrange(Cars93_1, desc(Max.Price))
head(b3)
##    Manufacturer    Model    Type Min.Price Price Max.Price MPG.city MPG.highway
## 1 Mercedes-Benz     300E Midsize      43.8  61.9      80.0       19          25
## 2      Infiniti      Q45 Midsize      45.4  47.9      50.4       17          22
## 3          Audi      100 Midsize      30.8  37.7      44.6       19          26
## 4      Cadillac  Seville Midsize      37.5  40.1      42.7       16          25
## 5     Chevrolet Corvette  Sporty      34.6  38.0      41.5       17          25
## 6         Acura   Legend Midsize      29.2  33.9      38.7       18          25
# 또는
b4 <- Cars93_1 %>%
   arrange(desc(Max.Price))
head(b4)
##    Manufacturer    Model    Type Min.Price Price Max.Price MPG.city MPG.highway
## 1 Mercedes-Benz     300E Midsize      43.8  61.9      80.0       19          25
## 2      Infiniti      Q45 Midsize      45.4  47.9      50.4       17          22
## 3          Audi      100 Midsize      30.8  37.7      44.6       19          26
## 4      Cadillac  Seville Midsize      37.5  40.1      42.7       16          25
## 5     Chevrolet Corvette  Sporty      34.6  38.0      41.5       17          25
## 6         Acura   Legend Midsize      29.2  33.9      38.7       18          25

4.5.2 복수 개의 정렬 기준으로 행을 정렬하기

여러개의 기준에 의해서 정렬을 하고 싶으면 기준이 되는 컬럼을 정렬하고자 하는 순서대로 나열하면 됩니다.

기본 정렬 옵셥은 오름차순(ascending)이며, 만약 내림차순(descending) 으로 정렬을 하고 싶다면 desc()를 입력해주면 됩니다.

Cars93_1 데이터 프레임의 고속도로 연비(MPG.highway) 가 높은 순서(오름차순)대로 정렬을 하되, 만약 고속도로 연비가 동일하다면 최고가격(Max.Price)가 낮은 순서대로(내림차순) 정렬을 해보자.

# arrange() : reorder rows of data frame 
b5 <- arrange(Cars93_1, desc(MPG.highway), Max.Price)
head(b5)
##   Manufacturer  Model  Type Min.Price Price Max.Price MPG.city MPG.highway
## 1          Geo  Metro Small       6.7   8.4      10.0       46          50
## 2        Honda  Civic Small       8.4  12.1      15.8       42          46
## 3       Suzuki  Swift Small       7.3   8.6      10.0       39          43
## 4      Pontiac LeMans Small       8.2   9.0       9.9       31          41
## 5       Saturn     SL Small       9.2  11.1      12.9       28          38
## 6        Mazda    323 Small       7.4   8.3       9.1       29          37
# 또는
b6 <- Cars93_1 %>%
  arrange(desc(MPG.highway), Max.Price)
head(b6)
##   Manufacturer  Model  Type Min.Price Price Max.Price MPG.city MPG.highway
## 1          Geo  Metro Small       6.7   8.4      10.0       46          50
## 2        Honda  Civic Small       8.4  12.1      15.8       42          46
## 3       Suzuki  Swift Small       7.3   8.6      10.0       39          43
## 4      Pontiac LeMans Small       8.2   9.0       9.9       31          41
## 5       Saturn     SL Small       9.2  11.1      12.9       28          38
## 6        Mazda    323 Small       7.4   8.3       9.1       29          37
  • 위의 스크립트에 대한 결과(의 일부)는 다음과 같다.
  • 첫 번째 정렬 조건인 MPG.Highway내림차순으로 행들이 정렬되어 있음을 알 수 있다. 그런데 MPG.highway의 값이 같은 경우네는 두 번쨰 정렬 조건인 Max.Price오름차순으로 행들이 정렬되어 있다.

참고로, arrange() 함수 말고도 아래처럼 order() 함수를 사용해서 indexing 하는 방법도 있지만, 아무래도 arrange() 함수가 더 깔끔하고 해석하기에 좋다.

# order() 함수의 이용
b7 <- Cars93[order(-Cars93_1$MPG.highway, Cars93_1$Max.Price), ]
head(b7)
##    Manufacturer  Model  Type Min.Price Price Max.Price MPG.city MPG.highway
## 39          Geo  Metro Small       6.7   8.4      10.0       46          50
## 42        Honda  Civic Small       8.4  12.1      15.8       42          46
## 83       Suzuki  Swift Small       7.3   8.6      10.0       39          43
## 73      Pontiac LeMans Small       8.2   9.0       9.9       31          41
## 79       Saturn     SL Small       9.2  11.1      12.9       28          38
## 53        Mazda    323 Small       7.4   8.3       9.1       29          37
##        AirBags DriveTrain Cylinders EngineSize Horsepower  RPM Rev.per.mile
## 39        None      Front         3        1.0         55 5700         3755
## 42 Driver only      Front         4        1.5        102 5900         2650
## 83        None      Front         3        1.3         70 6000         3360
## 73        None      Front         4        1.6         74 5600         3130
## 79 Driver only      Front         4        1.9         85 5000         2145
## 53        None      Front         4        1.6         82 5000         2370
##    Man.trans.avail Fuel.tank.capacity Passengers Length Wheelbase Width
## 39             Yes               10.6          4    151        93    63
## 42             Yes               11.9          4    173       103    67
## 83             Yes               10.6          4    161        93    63
## 73             Yes               13.2          4    177        99    66
## 79             Yes               12.8          5    176       102    68
## 53             Yes               13.2          4    164        97    66
##    Turn.circle Rear.seat.room Luggage.room Weight  Origin           Make
## 39          34           27.5           10   1695 non-USA      Geo Metro
## 42          36           28.0           12   2350 non-USA    Honda Civic
## 83          34           27.5           10   1965 non-USA   Suzuki Swift
## 73          35           25.5           17   2350     USA Pontiac LeMans
## 79          40           26.5           12   2495     USA      Saturn SL
## 53          34           27.0           16   2325 non-USA      Mazda 323