105  arrange()の実践

library(tidyverse)

それでは、arrange関数の動作を実際のRで確認していきましょう。

dat <- tibble(
  a = c(1,3,2,4,3,5,3,2,5,1),
  b = c(5,2,3,4,5,2,1,2,1,4),
  c = c(1,2,3,4,5,6,7,8,9,10)
)

まずは、1列指定のarrangeですが、

dat %>% arrange(a)
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     1     5     1
 2     1     4    10
 3     2     3     3
 4     2     2     8
 5     3     2     2
 6     3     5     5
 7     3     1     7
 8     4     4     4
 9     5     2     6
10     5     1     9
dat %>% arrange(b)
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     3     1     7
 2     5     1     9
 3     3     2     2
 4     5     2     6
 5     2     2     8
 6     2     3     3
 7     4     4     4
 8     1     4    10
 9     1     5     1
10     3     5     5

c列が元の並び順に番号を振ってあるので、arrange関数が確かにデータを並び替えてくれているのがわかると思います。

descending order、(降順)にならべるdescも利用してみましょう

dat %>% arrange(desc(a))
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     5     2     6
 2     5     1     9
 3     4     4     4
 4     3     2     2
 5     3     5     5
 6     3     1     7
 7     2     3     3
 8     2     2     8
 9     1     5     1
10     1     4    10
dat %>% arrange(desc(b))
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     1     5     1
 2     3     5     5
 3     4     4     4
 4     1     4    10
 5     2     3     3
 6     3     2     2
 7     5     2     6
 8     2     2     8
 9     3     1     7
10     5     1     9

たしかに、降順に並んでいますね?複数していする場合

dat %>% arrange(a)
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     1     5     1
 2     1     4    10
 3     2     3     3
 4     2     2     8
 5     3     2     2
 6     3     5     5
 7     3     1     7
 8     4     4     4
 9     5     2     6
10     5     1     9
dat %>% arrange(a,b)
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     1     4    10
 2     1     5     1
 3     2     2     8
 4     2     3     3
 5     3     1     7
 6     3     2     2
 7     3     5     5
 8     4     4     4
 9     5     1     9
10     5     2     6

を比べてみてください。arrange(a)だと、b列の最初の2行は5,4とならんでいますが

arrange(a,b)とすると、b列の最初の二行は4,5とならんでいます。

descは複数列を指定しても有効なので、a列、b列の並び替え方の組み合わせは、

dat %>% arrange(a      ,     b )
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     1     4    10
 2     1     5     1
 3     2     2     8
 4     2     3     3
 5     3     1     7
 6     3     2     2
 7     3     5     5
 8     4     4     4
 9     5     1     9
10     5     2     6
dat %>% arrange(a      ,desc(b))
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     1     5     1
 2     1     4    10
 3     2     3     3
 4     2     2     8
 5     3     5     5
 6     3     2     2
 7     3     1     7
 8     4     4     4
 9     5     2     6
10     5     1     9
dat %>% arrange(desc(a),     b )
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     5     1     9
 2     5     2     6
 3     4     4     4
 4     3     1     7
 5     3     2     2
 6     3     5     5
 7     2     2     8
 8     2     3     3
 9     1     4    10
10     1     5     1
dat %>% arrange(desc(a),desc(b))
# A tibble: 10 × 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     5     2     6
 2     5     1     9
 3     4     4     4
 4     3     5     5
 5     3     2     2
 6     3     1     7
 7     2     3     3
 8     2     2     8
 9     1     5     1
10     1     4    10

全部で4通りです。

以上arrangeの実践でした。次は練習問題を解いておきましょう。