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の実践でした。次は練習問題を解いておきましょう。