本文介绍了在R中使用ifElse语句进行汇总统计的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要设置我的自定义摘要统计信息函数,如果列是一个因素,我希望看到prop.table而不是摘要统计信息。

    set.seed(123)
df <- data.frame(replicate(6, sample(c(1:10, -99),6, rep = T)))
df$X7 <- factor(df$X6, levels = c(7,9,10)); str(df)
    
    
    summary <- function(x){
      if (is.numeric(x)){
      funs <- c(mean, median, sd, mad, IQR)
      lapply(funs, function(f) f(x, na.rm = T))
      }
      else 
      df[] <- {lapply(df, prop.table)} #not sure how to save the outcome
    }
    
    summary(df)

预期答案

                mean   median  sd  mad  IQR
X1            mean(X1)
X2            mean(X2)     
X3            
X4
X5
X6
X7.Factor7  prop.table(X7.Factor7)
X7.Factor9  prop.table(X7.Factor9)
X7.Factor10 prop.table(X7.Factor10)

推荐答案

您需要重新考虑您希望输出的显示方式。描述性统计数据和表格不容易组合,因为它们可能以任何顺序出现。这里有一个开始思考它的方法。

stats <- function(x) {
    if (is.numeric(x)) {
        c(mean=mean(x), median=median(x), sd=sd(x), mad=mad(x), IQR=IQR(x))
    } else {
        prop.table(table(x))
    }
}
result <- sapply(df, stats)
result
# $X1
#      mean    median        sd       mad       IQR 
# -12.50000   3.00000  42.47705   2.96520   3.00000 
# 
# $X2
#      mean    median        sd       mad       IQR 
# -10.83333   5.50000  43.25467   3.70650   4.00000 
# 
# $X3
#      mean    median        sd       mad       IQR 
# -10.66667   7.00000  43.34820   2.96520   5.50000 
# 
# $X4
#     mean   median       sd      mad      IQR 
# 7.833333 8.500000 2.639444 2.223900 2.500000 
# 
# $X5
#      mean    median        sd       mad       IQR 
# -13.16667   3.50000  42.09711   2.96520   3.25000 
# 
# $X6
#     mean   median       sd      mad      IQR 
# 8.666667 9.000000 1.366260 1.482600 2.250000 
# 
# $X7
# x
#         7         9        10 
# 0.3333333 0.3333333 0.3333333 

您可以将数字向量与

num <- sapply(df, is.numeric)
do.call(rbind, result[num])

但您仍必须分别处理这些表。

这篇关于在R中使用ifElse语句进行汇总统计的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 09:03