有没有办法轻松扩展 R 的 summary()
函数(或创建具有类似输出的新函数)以将因子显示为总数的百分比?
summary(chickwts)
# weight feed
# Min. :108.0 casein :12
# 1st Qu.:204.5 horsebean:10
# Median :258.0 linseed :12
# Mean :261.3 meatmeal :11
# 3rd Qu.:323.5 soybean :14
# Max. :423.0 sunflower:12
所需输出:
pct_summary(chickwts)
# weight feed
# Min. :108.0 casein :17%
# 1st Qu.:204.5 horsebean:14%
# Median :258.0 linseed :17%
# Mean :261.3 meatmeal :15%
# 3rd Qu.:323.5 soybean :20%
# Max. :423.0 sunflower:17%
# Or even this...
# weight feed
# Min. :108.0 casein :12 17%
# 1st Qu.:204.5 horsebean:10 14%
# Median :258.0 linseed :12 17%
# Mean :261.3 meatmeal :11 15%
# 3rd Qu.:323.5 soybean :14 20%
# Max. :423.0 sunflower:12 17%
我发现的最接近的是Hmisc::describe()
。
最佳答案
您可以奇怪地重新编码函数体的部分内容。
## Rework a piece of the body
mysummary <- summary.factor
body(mysummary)[[5]] <- quote(
tbl <- round(table(object)/sum(table(object))*100)
)
summary.factor(chickwts$feed)
# casein horsebean linseed meatmeal soybean sunflower
# 12 10 12 11 14 12
mysummary(chickwts$feed)
# casein horsebean linseed meatmeal soybean sunflower
# 17 14 17 15 20 17
这可能是一个比您正在寻找的更复杂的解决方案,但您可以对 summary.data.frame
执行类似的操作,并告诉它使用修改后的 summary.factor
在您的示例中。
所以,它看起来像这样
mysumm <- summary.data.frame
body(mysumm)[[3]] <- quote(
z <- lapply(X=as.list(object), FUN=function(x) if (is.factor(x)) mysummary(x) else summary(x))
)
mysumm(chickwts)
# weight feed
# Min. :108.0 casein :17
# 1st Qu.:204.5 horsebean:14
# Median :258.0 linseed :17
# Mean :261.3 meatmeal :15
# 3rd Qu.:323.5 soybean :20
# Max. :423.0 sunflower:17
注意:我忽略了摘要的其他参数以缩短代码,但您可以添加这些参数以沿着通用摘要方法传递。
关于r - 扩展 R 的汇总函数(或创建具有类似输出的新函数)以将因子显示为总数的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32080146/