2016-05-08 9 views
0

パッケージからsummarizeを使用して要約統計量を出力しようとしています。 統計値を2小数点以下に丸めます。 roundsummarizeに設定すると、エラーメッセージが表示されます。丸め集計関数の結果がエラー

library(rockchalk) 
M1 <- structure(c(0.18, 0.2, 0.24, 0.35, -0.22, -0.17, 0.28, -0.28, -0.14, 0.03, 0.87, -0.2, 0.06, -0.1, -0.72, 0.18, 0.01, 0.31, -0.36, 0.61, -0.16, -0.07, -0.13, 0.01, -0.09, 0.26, -0.14, 0.08, -0.62, -0.2, 0.3, -0.21, -0.11, 0.05, 0.06, -0.28, -0.27, 0.17, 0.42, -0.05, -0.15, 0.05, -0.07, -0.22, -0.34, 0.16, 0.34, 0.1, -0.12, 0.24, 0.45, 0.37, 0.61, 0.9, -0.25, 0.02), .Dim = c(56L, 1L)) 

#This works 
round(apply(M1, 2, mean),2) 

#This works 
summaryround <- function(x) {round(summary(x),2)} 
apply(M1, 2, summaryround) 

#This gives error "non-numeric argument" 
round(apply(M1, 2, summarize),2) 

#Thought this would work but also gives error "non-numeric argument" 
summarizeround <- function(x) {round(summarize(x),2)} 
apply(M1, 2, summarizeround) 

私はsummaryの出力を丸めることができますが、 を使用したいのですが、私は同じプリントアウトで尖度と歪度の出力を得たいと思っています(もちろん、summarykurtosisを組み合わせた独自の関数を作成できます。避けられれば)。


EDIT:実際には大きなデータフレームでこれを実行する必要があります。再現可能な例を簡単にすると思ったので、それを1列の行列に変換しました。

答えて

2

を取得します。また、集計する列が複数ある場合は、lapplyを使用して結果のrownamesを保持し、do.call(bind,...)を使用することをお勧めします。

summarizeround <- function(x) {round(summarize(x)$numerics,2)} 
summaryDf <- do.call(cbind, lapply(as.data.frame(M1), summarizeround)) 

      x 
0%  -0.72 
25%  -0.16 
50%  0.02 
75%  0.24 
100%  0.90 
mean  0.04 
sd  0.32 
var  0.10 
skewness 0.45 
kurtosis 0.56 
NA's  0.00 
N  56.00 
+0

Psidomでは、「x」を取得するのではなく列名を保持する方法を知っていますか?あなたのコードは素晴らしいですが、私は数百の列を持つデータフレーム上でこれを実行しており、それらの列名が必要です。ありがとう! – Krug

+1

summaryList < - lapply(as.data.frame(M1)、summarizeround)で2つのステップに分割できます。 summaryDf < - as.data.frame(do.call(cbind、summaryList)) 'を呼び出し、その名前をreusltデータフレーム' names(summaryDf)< - names(summaryList) 'に割り当てます。 – Psidom

0

?rockchalk :: summarizeは、引数がデータフレームであると言います。そのため、データフレーム

M1<-as.data.frame(M1) 
summarize(M1) 

$numerics 
       V1 
0%  -0.7200 
25%  -0.1625 
50%  0.0150 
75%  0.2400 
100%  0.9000 
mean  0.0400 
sd  0.3152 
var  0.0993 
skewness 0.4485 
kurtosis 0.5626 
NA's  0.0000 
N  56.0000 

$factors 
NULL 

M1を作成し、あなただけのsummarize結果からnumericsフィールドを抽出する必要が丸め

> round(summarize(M1)[[1]],2) 
      V1 
0%  -0.72 
25%  -0.16 
50%  0.02 
75%  0.24 
100%  0.90 
mean  0.04 
sd  0.32 
var  0.10 
skewness 0.45 
kurtosis 0.56 
NA's  0.00 
N  56.00 
+0

rockchalk failure msgとは何ですか? – greengrass62

+0

'round(summarize(M1)、2)'を実行すると同じエラーが発生しました。このコードは多数の列を対象としているため、列1を選択しても機能しません。とにかくありがとう! – Krug