簡體   English   中英

使用R中的plyr制作更好的匯總統計表

[英]Making a better summary statistics table with plyr in R

每次我獲得一個新的數據集時,我要做的第一件事就是查看摘要統計信息。 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

對於這個小數據集(即,只有幾個公司特征),這很容易。 但是我有更多或者做什么更多的統計數據或更多的切片切割,它可能會變得乏味。

我用reshape2plyr嘗試了這個,但是得到了一個錯誤。

> 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

這讓我有兩個問題:

  1. ddply我做錯了ddply
  2. 我在這里重新發明輪子了嗎? 鑒於這是我讀寫的所有內容中的表1,是否存在我尚未找到的現有解決方案?

謝謝!

嘗試stat.descpastecs包。 您可以通過調用stat.desc(my.data)在數據集上使用它。 要以您希望的格式獲得輸出,您需要(a)轉置數據框,(b)刪除非數字變量和(c)僅保留您需要的摘要統計列

我在上面的代碼中發現了概念錯誤。 因為meanmediansd上的向量操作,我需要養活他們在數據幀的特定載體ddply創建一個基於.variables (I被錯誤地施加從手動,其使用的數據幀運營商的示例nrowncol 。)這里的正確的代碼:

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的解決方案更容易,但這可以擴展到您可能想要的任何類型的摘要統計數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM