8

新しいデータセットを取得するたびに、最初に行うことは要約統計量を確認することです。このsummary関数はかなりうまく機能しますが、標準偏差、さまざまなブレークポイントを持つ分位数、観測数などに頻繁に関心があります。また、プレゼンテーションは、summary消化するのに最も簡単な方法ではなく、ジャーナルに表示されるものでもありません(つまり、summary垂直ではなく水平です)。

たとえば、これが私がいくつかの構成されたデータで要約から得たものです。

> library(plyr)
> library(reshape2)
> my.data <- data.frame(firm = factor(rep(letters[1:5], each = 5)), returns = rnorm(n = 5 * 5), leverage = rep(c(0.3, 0.4, 0.5, 0.6, 0.7), each = 5) + .... [TRUNCATED] 
> my.summary <- summary(my.data)
> my.summary
 firm     returns           leverage     
 a:5   Min.   :-1.6765   Min.   :0.2863  
 b:5   1st Qu.:-0.6945   1st Qu.:0.3929  
 c:5   Median :-0.1930   Median :0.5061  
 d:5   Mean   :-0.1159   Mean   :0.5009  
 e:5   3rd Qu.: 0.4323   3rd Qu.:0.6011  
       Max.   : 1.1915   Max.   :0.7093  

しかし、私は本当にこのようなものが欲しいとしましょう。

> my.manual.summary <- data.frame(mean = c(mean(my.data$returns), mean(my.data$leverage)), median = c(median(my.data$returns), median(my.data$leverage .... [TRUNCATED] 
> rownames(my.manual.summary) <- c("returns", "leverage")
> my.manual.summary
               mean     median        sd
returns  -0.1158633 -0.1929571 0.6996548
leverage  0.5008895  0.5061301 0.1453381

この小さなデータセット(つまり、いくつかのしっかりした特性)の場合、これは簡単です。しかし、私はより多くの統計またはより多くのスライスダイシングを行うためのより多くのまたは何をすべきかを持っています、それは退屈になる可能性があります。

reshape2とでこれを試しましplyrたが、エラーが発生します。

> my.melted.data <- melt(my.data)
Using firm as id variables
> my.improved.summary <- ddply(my.melted.data[, -1], .(variable), c("mean", "median", "sd"), na.rm = T)
Error in proto[[i]] <- fs[[i]](x, ...) : 
  more elements supplied than there are to replace
In addition: Warning messages:
1: In mean.default(X[[1L]], ...) :
  argument is not numeric or logical: returning NA
2: In mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]) :
  argument is not numeric or logical: returning NA
3: In var(as.vector(x), na.rm = na.rm) : NAs introduced by coercion
4: In mean.default(X[[1L]], ...) :
  argument is not numeric or logical: returning NA

これは私に2つの質問を残します:

  1. 私は何が間違っているのddplyですか?
  2. ここで車輪の再発明をしていますか?これが私が読み書きするすべての表1であることを考えると、私が見つけていない既存の解決策はありますか?

ありがとう!

4

2 に答える 2

11

パッケージstat.descで試してみてください。pastecsを呼び出すことにより、データセットで使用できますstat.desc(my.data)。希望する形式で出力を取得するには、(a)データフレームを転置し、(b)非数値変数を削除し、(c)必要な要約統計量列のみを保持する必要があります。

于 2011-04-07T16:57:35.023 に答える
3

上記のコードで概念上のエラーを見つけました。、、はベクトルを操作するためmean、に基づいて作成されるデータフレームで特定のベクトルをフィードする必要があります。(データフレーム演算子とを使用したマニュアルの例を誤って適用していました。)正しいコードは次のとおりです。mediansdddply.variablesnrowncol

my.melted.data <- melt(my.data)
my.improved.summary <- ddply(
  my.melted.data
  , .(variable)
  , function(x) data.frame(
    mean = mean(x$value)
    , median = median(x$value)
    , sd = sd(x$value)
  )
)

Ramnathのソリューションはより簡単ですが、これは必要なタイプの要約統計量に拡張できます。

于 2011-04-07T21:01:52.793 に答える