如何将sd字段添加到数字向量的摘要中?

时间:2015-03-02 22:51:59

标签: r

summary.default方法计算min,max,mean,median,1st和3rd分位数。 如何将sd添加到表格中?

PS。我可以定义summary.numeric

summary.numeric <- function (v) {
  s <- summary.default(v)
  s <- signif(c(s,sd(v)),3)
  names(s)[length(s)] <- "sd"
  s
}
如果我想正确处理digits参数,将"sd"放在NA's&amp; c之前,这会变得更加丑陋。当signif中的summary.default过于激进时,这也是错误

> v
 [1] 0.9876721 0.9902479 0.9899369 0.9882979 0.9898442 0.9956581 0.9884242
 [8] 0.9897999 0.9887597 0.9895176
> summary(v)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.      sd 
0.98800 0.98800 0.99000 0.99000 0.99000 0.99600 0.00222 

这真的是最好的吗?

1 个答案:

答案 0 :(得分:1)

我建议从summary.default中提取并重写相关的源代码,而不是试图围绕它编写包装器:

# Borrows some code from summary.default
summary.numeric <- function (object,digits = max(3L, getOption("digits")-3L)) {

  nas <- is.na(object)
  object <- object[!nas]
  qq <- stats::quantile(object)
  qq <- signif(c(qq[1L:3L], mean(object), qq[4L:5L], sd(object)), digits)
  names(qq) <- c("Min.", "1st Qu.", "Median", "Mean", "3rd Qu.", "Max.", "sd")

  if (any(nas)) 
    c(qq, `NA's` = sum(nas))
  else qq
}

使用示例:

set.seed(1)
summary(c(NA,runif(10)))
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.      sd    NA's 
# 0.06179 0.29220 0.60100 0.55150 0.83900 0.94470 0.31570 1.00000