R 中给定变量的均值、中值和标准差列表

List of mean, median and sd for a given variable in R

是否可以在apply multiple argument中赋予参数FUN?我试图获取任何数据框中给定变量的均值、中值和 sd 的列表。 示例:apply(X = mtcars, MARGIN = mtcars[i], FUN = c(mean, median, sd) ,其中 i 是感兴趣的变量(或列)。我不确定这是否是要使用的方法,如果不是,请指导我使用更合适的方法。谢谢!

我想要这样的东西:

data(mtcars)
$mpg 
mean median st
20.09 19.2 6.03   

最简单的方法是 summary:

summary(mtcars$mpg)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90 

或者,您可以使用 sapply 并为其提供函数列表:

sapply(list(mean = mean, median = median, sd = sd), function(x, y) x(y), mtcars$mpg)
     mean    median        sd 
20.090625 19.200000  6.026948

这里的x是指list中的函数,ymtcars列中的函数。最后一个参数只是您希望函数应用到的实际列。

你可以试试

mtcars_summary <- apply(mtcars, 2, function(x){
  c(mean = mean(x), sd = sd(x), med = median(x))
}) 

           mpg      cyl     disp        hp      drat        wt      qsec        vs        am      gear   carb
mean 20.090625 6.187500 230.7219 146.68750 3.5965625 3.2172500 17.848750 0.4375000 0.4062500 3.6875000 2.8125
sd    6.026948 1.785922 123.9387  68.56287 0.5346787 0.9784574  1.786943 0.5040161 0.4989909 0.7378041 1.6152
med  19.200000 6.000000 196.3000 123.00000 3.6950000 3.3250000 17.710000 0.0000000 0.0000000 4.0000000 2.0000

{dplyr} 提供了一种非常好的方法 across():

library(dplyr)

mtcars %>% 
    summarise(across(mpg, list(mean = mean, median = median, sd = sd)))
#>   mpg_mean mpg_median   mpg_sd
#> 1 20.09062       19.2 6.026948