【问题标题】:Summary statistics of numeric variables in data frame in specific format特定格式数据框中数值变量的汇总统计
【发布时间】:2020-06-19 13:27:23
【问题描述】:

我有一个数据框,里面有 3 个数值变量。我需要计算这些数值变量的一些参数,例如均值、中位数、标准差、峰度。然后我需要把它安排在一个数据框中。因此,该数据框的第一列将包含所有数字变量名称,第二列将包含所有平均值,第三列将包含所有中值,依此类推。如何实现?我熟悉dplyr 包。那么有什么建议吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以将summariseacross 一起使用:

    library(dplyr)
    library(tidyr)
    
    mtcars %>%
      select(1:3) %>%
      summarise(across(where(is.numeric), list(mean = mean, std = sd, med = median)))
    
    #  mpg_mean  mpg_std mpg_med cyl_mean  cyl_std cyl_med disp_mean disp_std disp_med
    #1 20.09062 6.026948    19.2   6.1875 1.785922       6  230.7219 123.9387    196.3
    

    在老版本的dplyr中,可以使用summarise_if

    mtcars %>%
      select(1:3) %>%
      summarise_if(is.numeric, list(mean = mean, std = sd, med = median))
    

    您可以在上面的答案中添加pivot_longer 以获取所需格式的数据。

    mtcars %>%
      select(1:3) %>%
      summarise(across(where(is.numeric),list(mean=mean,std=sd,med = median))) %>%
      pivot_longer(cols = everything(), 
                   names_to = c('col', '.value'), 
                   names_sep = '_')
    
    
    # A tibble: 3 x 4
    #  col     mean    std   med
    #  <chr>  <dbl>  <dbl> <dbl>
    #1 mpg    20.1    6.03  19.2
    #2 cyl     6.19   1.79   6  
    #3 disp  231.   124.   196. 
    

    或者你可以先旋转然后进行计算:

    mtcars %>%
      select(1:3) %>%
      pivot_longer(cols = everything()) %>%
      group_by(name) %>%
      summarise(mean = mean(value), std = sd(value), med = median(value))
    

    【讨论】:

    • 我实际上尝试使用across,但格式不是我想要的。它只给出一行。我想要第一列中的所有变量名称,然后第二列中的所有平均值和第三列中的所有中值等等。
    猜你喜欢
    • 2021-08-07
    • 2019-08-18
    • 2018-10-30
    • 2022-10-23
    • 2014-04-09
    • 2015-07-18
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多