日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

要約関数のsummaryとtable

久しぶりにR tutorial。

  • summary関数

数値に使うと、最小値、四分位、平均、最大値、NAの数を要約します。
そして、数値以外の属性についてもデータセットの概観できます。

> x <- sample(10,100,replace=TRUE)
> x[sample(100,10)] <- NA
> 
> y <- data.frame("num"=x,"factor"=LETTERS[sample(3,100,re=TRUE)]
+ ,"char"=I(LETTERS[sample(4,100,re=TRUE)])
+ ,"logical"=as.logical(sample(0:1,100,re=T)))
> summary(y)
      num         factor     char            logical       
 Min.   : 1.000   A:29   Length:100         Mode :logical  
 1st Qu.: 3.000   B:40   Class :AsIs        FALSE:42       
 Median : 6.000   C:31   Mode  :character   TRUE :58       
 Mean   : 5.533                             NA's :0        
 3rd Qu.: 8.000                                            
 Max.   :10.000                                            
 NA's   :10.000                                            

$charのは属性を出力しますが、その内訳まで分かりません。

  • table関数
    • summary関数よりも詳しい要約を作る関数。特にcharacterの要約は便利。
> apply(y,2,table)
$num
 1  2  3  4  5  6  7  8  9 10 
12  5  9  9  9  8  9 12  9  8 

$factor
 A  B  C 
29 40 31 

$char
 A  B  C  D 
24 26 25 25 

$logical
 TRUE FALSE 
   58    42 

$charの出力が文字列ごとに出力されます。

    • で、table関数は多変量に使うともう少し便利。
> table(y[,2:1])
      num
factor 1 2 3 4 5 6 7 8 9 10
     A 4 0 3 4 3 2 2 3 3  1
     B 5 3 1 3 5 3 2 8 3  4
     C 3 2 5 2 1 3 5 1 3  3
>
> jpeg("table.jpg",width=720)
> layout(t(1:2))
> plot(table(y[,2:1]))
> barplot(table(y[,2:1]))
> dev.off()

で、こんな感じ。

多分、こんな時に便利じゃないかと思う。

> y <- data.frame(class=factor(rep(1:2,each=10),label=c("healthy","disease"))
+ ,weight=sample(5, 20, replace=TRUE)+5)
> table(y)
         weight
class     6 7 8 9 10
  healthy 4 1 0 3  2
  disease 4 1 3 0  2
> jpeg("table2.jpg")
> plot(table(y))
> dev.off()

で、こんな感じ。