今回は『R役に立つ小技5選』シリーズに入れようか迷った内容ですが、こまめに記事にしたいということで単独で掲載することにします。
そもそもの発端は、「〇〇くん、これに順位をつけたいんだけど、うまくいく方法はないか」という疑問からでした。「これ」というのは、重複のある年月の列でした。
さて、それに対して、どうアプローチするか書いていきます。(とっても簡単ですが、、、)
まずは模擬データ(data)として、2016年9月から2017年4月を3つずつ生成した列(year)を用意します。
data ## year ## 1 201609 ## 2 201609 ## 3 201609 ## 4 201610 ## 5 201610 ## 6 201610 ## 7 201611 ## 8 201611 ## 9 201611 ## 10 201612 ## 11 201612 ## 12 201612 ## 13 201701 ## 14 201701 ## 15 201701 ## 16 201702 ## 17 201702 ## 18 201702 ## 19 201703 ## 20 201703 ## 21 201703 ## 22 201704 ## 23 201704 ## 24 201704
これにランクをつけたいわけです。つまりrank()関数を使えば?という発想になるんですが、
data$rank <- rank(data$year) data ## year rank ## 1 201609 2 ## 2 201609 2 ## 3 201609 2 ## 4 201610 5 ## 5 201610 5 ## 6 201610 5 ## 7 201611 8 ## 8 201611 8 ## 9 201611 8 ## 10 201612 11 ## 11 201612 11 ## 12 201612 11 ## 13 201701 14 ## 14 201701 14 ## 15 201701 14 ## 16 201702 17 ## 17 201702 17 ## 18 201702 17 ## 19 201703 20 ## 20 201703 20 ## 21 201703 20 ## 22 201704 23 ## 23 201704 23 ## 24 201704 23
うまくいきません。タイがあるので、平均値をとっているのでしょうか、、、
とりあえずループでこれを回避するTipsを書いておきます。
for(i in 1:length(data$year)){ data$rank[i] <- which(unique(data$year)==data$year[i]) }
結果はこんな感じです。
data ## year rank ## 1 201609 1 ## 2 201609 1 ## 3 201609 1 ## 4 201610 2 ## 5 201610 2 ## 6 201610 2 ## 7 201611 3 ## 8 201611 3 ## 9 201611 3 ## 10 201612 4 ## 11 201612 4 ## 12 201612 4 ## 13 201701 5 ## 14 201701 5 ## 15 201701 5 ## 16 201702 6 ## 17 201702 6 ## 18 201702 6 ## 19 201703 7 ## 20 201703 7 ## 21 201703 7 ## 22 201704 8 ## 23 201704 8 ## 24 201704 8
最近はこういったdata manipulationをすることが多く、本当に解析するというのはほぼ「データの整形」に等しいのだろうなと感じている今日この頃です。
20170404
RF