簡體   English   中英

R 中帶有 ifelse 語句的匯總統計

[英]Summary statistic with ifelse statement in R

我想設置我的自定義匯總統計 function 並且如果列是一個因素,我想查看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)

您需要重新考慮您希望 output 如何出現。 描述性統計數據和表格不容易組合,因為它們可以以任何順序出現。 這是開始考慮它的一種方法。

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])

但是您仍然需要單獨處理表格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM