r - 扩展 R 的汇总函数(或创建具有类似输出的新函数)以将因子显示为总数的百分比

标签 r summary

有没有办法轻松扩展 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/

相关文章:

r - 从 POSIXct 中提取时间

r - 将数据框摘要保存为数据框

r - Data Frame,错误总结

android - 如何设置 edittext 首选项摘要并坚持使用

pivot - openrefine可以做汇总表吗?

r - 与 rJava 和 xlsx 一起使用并行

r - 查找所有重复索引并将它们写入新列

ddply(plyr)中的R汇总函数以简单的方式

mysql - 每日日志类型汇总

r - 为什么 R(在我的示例中)处理日期/日期时间非常慢?