【问题标题】:Extract multiple descriptive statistics [duplicate]提取多个描述性统计[重复]
【发布时间】:2020-02-12 13:39:19
【问题描述】:

有这样的数据框:

   df <-  structure(list(id = c(43, 11, 24, 12), a = c(0.291435739245075, 
    0.309022489024281, 0.342122441665493, 0.302379459085847), b = c(0.200071678165039, 
    0.190343927195464, 0.279532043979674, 0.273976986189153), c = c(0.821534168725281, 
    0.789752582333892, 0.650428149039385, 0.787013452455617), d = c(0.173486758738976, 
    0.176046693204654, 0.242694587018572, 0.233888412456641), e = c(0.435969639177237, 
    0.435739245075326, 0.440206330717933, 0.481318878236717), a1 = c(0.292370115325048, 
    0.306001766354781, 0.292792504511884, 0.301265887593278), a2 = c(0.202618812958388, 
    0.212948148527398, 0.271737043531686, 0.215482483648419), a3 = c(0.796331613910684, 
    0.765138812446401, 0.782341572055755, 0.800798699553291), a4 = c(0.176161890255609, 
    0.202567614269075, 0.198510118140976, 0.191623894428303), a5 = c(0.431822545342839, 
    0.458753055921768, 0.47073354922114, 0.424501132771001)), row.names = c(NA, 
    4L), class = "data.frame")

如何提取每一列的描述性统计数据:

5% Mean Median 95% SD

【问题讨论】:

  • apply( df, 2, summary ) ?重复使用quantilemean 和/或sd 作为你的函数..
  • R 具有所有这些功能,quantile 用于百分位数。试一试,然后返回一个特定的问题。
  • 在您发布问题之前,查看已解决您问题的帖子。 SO 搜索不是很好。将 Google 与“site:stackoverflow.com”一起使用效果很好。对于这个问题,还有很快出现的thisthisthisthis。还发布您迄今为止尝试过的内容,这样人们就不会从头开始为您做项目

标签: r


【解决方案1】:

您可以使用以下代码来完成此操作

library(dplyr)
library(moments)
library(reshape2)

df.m <- melt(df, id="id")

df.m %>% 
  group_by(variable) %>% 
  summarize(min = min(value), max = max(value), 
            mean = mean(value), q5= quantile(value, probs = 0.05), 
            median = median(value), q95= quantile(value, probs = 0.75),
            sd = sd(value), skewness=skewness(value), kurtosis=kurtosis(value))

不需要reshape2 包中的melt() 函数的tidyverse 解决方案

library(tidyverse)

df %>% pivot_longer(-id) %>% 
  group_by(name) %>% 
  summarize(min = min(value), max = max(value), 
            mean = mean(value), q5= quantile(value, probs = 0.05), 
            median = median(value), q95= quantile(value, probs = 0.75),
            sd = sd(value), skewness=skewness(value), kurtosis=kurtosis(value))

【讨论】:

    【解决方案2】:

    您可以定义您的自定义函数f,如下所示

    f <- Vectorize(function(v) {
      data.frame(Qu5=quantile(v,0.05),
                 Mean = mean(v),
                 Median = median(v),
                 Qu95 = quantile(v,0.95),
                 SD = sd(v))
    })
    

    然后申请df_stat &lt;- f(df[-1]),这样

    > df_stat
           a          b          c          d          e          a1          a2         a3       
    Qu5    0.2930773  0.1918031  0.6709159  0.1738707  0.4357738  0.2924335   0.2041682  0.7677192
    Mean   0.31124    0.2359812  0.7621821  0.2065291  0.4483085  0.2981076   0.2256966  0.7861527
    Median 0.305701   0.2370243  0.788383   0.2049676  0.438088   0.2970292   0.2142153  0.7893366
    Qu95   0.3371574  0.2786988  0.8167669  0.2413737  0.475152   0.3052914   0.2632989  0.8001286
    SD     0.02182781 0.04730261 0.07613221 0.03686664 0.02210252 0.006669873 0.03119379 0.0160647
           a4        a5        
    Qu5    0.1784812 0.4255993 
    Mean   0.1922159 0.4464526 
    Median 0.195067  0.4452878 
    Qu95   0.201959  0.4689365 
    SD     0.0116169 0.02188433
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多