使用特定的摘要统计信息创建变量表

时间:2018-05-20 07:50:21

标签: r statistics dplyr

我试图用以下格式制作一个包含所有数值变量(即特征)的表格:

Feature | Count | % Missing | Cardinality | Min. | 1st Quartile | Mean | Median | 3rd Quartile | Max. | Std. Dev. |

-------- | ------- | ----------- | ------------- | ---- - | -------------- | ------ | -------- | -------------- | - ----- | ----------- |         | | | | | | | | | | |

因此,每一行表示一个特定的数字变量,每列表示上面显示的统计数据(Count,%Missing,Cardinality,Min。,1st Quartile,Mean,Median,3rd Quartile,Max.Std.Dev。)

假设我的数据集名为Mashable,我的数值变量称为X,Y和Z.我将如何创建此表?

提前致谢!

3 个答案:

答案 0 :(得分:1)

如果您已经使用dplyr,则可以使用长形数据和分组,并将所需的所有功能视为摘要。这可以让你轻松扩展,因此它与3个变量的工作流程相同,而不是25或100.它还可以相对快速地应用你想要的任何功能。

我用x,y和z制作了虚拟数据,然后将几行NA绑定到它上面,以显示缺失值计数。将其收集到长数据,按变量分组,然后使用您想要的任何摘要函数。我开始了你命名的前几个。这为您提供了所要求的格式。

library(tidyverse)

tibble(
  x = rnorm(100, mean = 1, sd = 1),
  y = rnorm(100, mean = 10, sd = 1),
  z = rexp(100, rate = 0.01)
) %>%
  bind_rows(tibble(x = c(NA, NA), y = c(NA, NA), z = c(NA, NA))) %>%
  gather(key = variable, value = value) %>%
  group_by(variable) %>%
  summarise(
    count = n(),
    missing = sum(is.na(value)),
    share_missing = missing / count,
    mean = mean(value, na.rm = T),
    sd = sd(value, na.rm = T),
    q1 = quantile(value, 0.25, na.rm = T)
  )
#> # A tibble: 3 x 7
#>   variable count missing share_missing    mean     sd     q1
#>   <chr>    <int>   <int>         <dbl>   <dbl>  <dbl>  <dbl>
#> 1 x          102       2        0.0196   0.997  1.08   0.246
#> 2 y          102       2        0.0196   9.81   0.962  9.10 
#> 3 z          102       2        0.0196 106.    90.6   39.9

reprex package(v0.2.0)创建于2018-05-20。

答案 1 :(得分:0)

如果X,Y和Z是数据集的列,那么您可以将apply函数用于R中数据集中的每一列,这将打印每个所需的统计信息,例如:

apply(dat,2,function(x) c(length(which(is.na(x)==TRUE)),summary(x)))

我的意思是一般来说你会在第一个参数中指定数据框。然后选择行/列或列表(例如,2是列,1是矩阵/ df的行),具体取决于您使用函数的结构类型。最后是一个函数,应用于previous参数中指定的每个列/行列。在这种情况下,我们使用c函数输出NA的长度和数据的摘要(min,max,quartiles)。通过扩展我们可以在这里指定任何参数,所以一般来说:

apply("Insert your data-frame","What part of the data-frame",function(x) c(a(x),b(x),...))

最好阅读R帮助文件以获取任何其他要求!

希望它有所帮助;欢呼声。

答案 2 :(得分:0)

您可以使用dplyrtidyr个包来转换您的数据。让我举一个例子来演示3个统计数据的转换(例如mean,median,sd)。您可以添加其他统计信息,例如count% missing等。

# Sample data
df <- data.frame(X = 1:10, Y = 11:20, Z = 101:110)

library(dplyr)
library(tidyr)

df %>% summarize_all(funs(mean,median,sd)) %>%  #Statistics for mean, median,sd
  gather(key, value) %>%    #Convert to long format
  separate(key, c("feature", "stat")) %>%  #separate out feature from function
  spread(stat, value)

#    feature  mean median      sd
# 1        X   5.5    5.5 3.02765
# 2        Y  15.5   15.5 3.02765
# 3        Z 105.5  105.5 3.02765