每次我得到一个新的数据集时,我做的第一件事就是查看汇总统计信息。该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
我用and试过这个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
这给我留下了两个问题:
- 我在做什么错
ddply
? - 我在这里重新发明轮子吗?鉴于这是我读写的所有内容中的表 1,是否存在我尚未找到的现有解决方案?
谢谢!