【R】0を省いてz-score化
データ解析において標準化は重要です。
よく使われるものとして「平均0、標準偏差が1になるよう変換する」という手法があります。
これは「z-score」とも呼ばれます。
Rではscale関数によって簡単にz-score化できるのですが、データによっては「0は検出されなかったものとして省きたい」場合もあると思います。
そのような場合は0をNAに変換した上でscale関数を実行すれば0を省いて標準化してくれます。
value <- c(rep(0, 5), 1:5) scale(value) # [,1] # [1,] -0.7893522 # [2,] -0.7893522 # [3,] -0.7893522 # [4,] -0.7893522 # [5,] -0.7893522 # [6,] -0.2631174 # [7,] 0.2631174 # [8,] 0.7893522 # [9,] 1.3155870 # [10,] 1.8418218 # attr(,"scaled:center") # [1] 1.5 # attr(,"scaled:scale") # [1] 1.900292 #0をNAに value[value == 0] <- NA scale(value) # [,1] # [1,] NA # [2,] NA # [3,] NA # [4,] NA # [5,] NA # [6,] -1.2649111 # [7,] -0.6324555 # [8,] 0.0000000 # [9,] 0.6324555 # [10,] 1.2649111 # attr(,"scaled:center") # [1] 3 # attr(,"scaled:scale") # [1] 1.581139 #1:5でscaleするときと同様の結果であることを確認 scale(1:5) # [,1] # [1,] -1.2649111 # [2,] -0.6324555 # [3,] 0.0000000 # [4,] 0.6324555 # [5,] 1.2649111 # attr(,"scaled:center") # [1] 3 # attr(,"scaled:scale") # [1] 1.581139
わりと時間かけてこの方法見つけたのですが、思いっきりドキュメントに書いてあった。。。