疫学と医療統計学と遺伝学と時々、大学院生活

疫学を専門とする大学院生の研究に関する備忘録的ページ。

R 重複のある列に順位をつける

今回は『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