LoginSignup
18
20

More than 5 years have passed since last update.

Rのdataframeをsummaryした結果をmatrixデータにまとめる方法

Last updated at Posted at 2017-01-15

data.frameのsummary結果を表形式でファイル出力したい

すごく小さなTIPSだけれど、今まで気が付かなかったので書いておく。
RでCSVから読み込んだりしたデータで各列の基本統計量を見るには、単純に読み込んだデータ(data.frameオブジェクト)をsummary関数へ渡してやればよい。

例えばCSVデータは大体こんな感じになっていると想定。

Name Height Weight
フシギダネ 0.7 6.9
ヒトカゲ 0.6 8.5
ゼニガメ 0.6 9.0
data.raw <- read.csv(file = "data.csv")
data.input <- data.raw[, -1] # Name列は削除
data.summary <- summary(data.raw) # データをそのままsummaryへ
print(data.summary)
>     Height           Wieght     
> Min.   :0.6000   Min.   :6.900  
> 1st Qu.:0.6000   1st Qu.:7.700  
> Median :0.6000   Median :8.500  
> Mean   :0.6333   Mean   :8.133  
> 3rd Qu.:0.6500   3rd Qu.:8.750  
> Max.   :0.7000   Max.   :9.000  

ところがこの基本統計量のデータをCSVやEXCELに出力しようとすると、rownameのない、しかも"Min. "などのラベルが含まれたデータが吐き出されてしまう。

write.csv(data.summary, file = "summary.csv")
summary.csv
"","    Height","    Wieght"
"","Min.   :0.6000  ","Min.   :6.900  "
"","1st Qu.:0.6000  ","1st Qu.:7.700  "
"","Median :0.6000  ","Median :8.500  "
"","Mean   :0.6333  ","Mean   :8.133  "
"","3rd Qu.:0.6500  ","3rd Qu.:8.750  "
"","Max.   :0.7000  ","Max.   :9.000  "

ほしいデータは本来こんな感じなのだが...

summary.csv
"       ","Height","Wieght"
"Min.   ","0.6000","6.900"
"1st Qu.","0.6000","7.700"
"Median ","0.6000","8.500"
"Mean   ","0.6333","8.133"
"3rd Qu.","0.6500","8.750"
"Max.   ","0.7000","9.000"

applyで系列ごとにsummaryを適用すると表形式のデータが掃き出せる

理由はよく分かっていないのだけれど、apply関数を使ってsummaryを列ごとに適用するとデータと行ラベルをうまく分離したmatrixオブジェクトが取得できることが判明。

data.summary <- apply(data.input, 2, summary)
write.csv(data.summary, file = "summary.csv")
summary.csv
""        , "Height" , "Wieght"
"Min."    , 0.6      , 6.9
"1st Qu." , 0.6      , 7.7
"Median"  , 0.6      , 8.5
"Mean"    , 0.6333   , 8.133
"3rd Qu." , 0.65     , 8.75
"Max."    , 0.7      , 9

なおデータの中に統計量取れない値(文字列とか)が入っていると、他の列も含めて統計量が出ないので事前によけておくこと。
あとnaとかの混入もmatrixではなくlistで出てきてしまうので0置換などしておくよう注意する。

修論書いている途中にハマって、意外と調べたら出てこなかったのでメモしておく。

18
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20