Создание таблицы переменных с конкретной сводной статистикой - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь составить таблицу со всеми моими числовыми переменными (т.е. функцией) в следующем формате:

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

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

Таким образом, каждая строка обозначает определенную числовую переменную, а в каждом столбце указана статистика, показанная выше (Счетчик,% отсутствует, Количество элементов, Мин., 1-й квартиль, Среднее, Медиана, 3-й квартиль, Макс. Стандартная величина. Дев.)

Скажем, мой набор данных называется Mashable, а мои числовые переменные называются X, Y и Z. Как бы я создал эту таблицу?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

Вы можете использовать пакеты dplyr и tidyr для преобразования ваших данных.Позвольте мне взять пример, чтобы продемонстрировать преобразование для 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
0 голосов
/ 20 мая 2018

Если вы уже используете dplyr, вы можете использовать длинные данные и группирование данных и рассматривать все функции, которые вам нужны, как суммирование.Это позволяет легко масштабировать, так что это тот же рабочий процесс для 3 переменных, что и для 25 или 100. Это также позволяет относительно быстро применять любые функции, которые вы хотите.

Я сделал фиктивные данные с помощью x, y,и z, затем привязать к нему пару строк NA s, чтобы показать количество пропущенных значений.Соберите его для длинных данных, сгруппируйте по переменной, затем используйте любые функции суммирования, которые вам нужныЯ начал первые несколько названных вами.Это дает вам запрошенный формат.

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

Создан в 2018-05-20 пакетом представлением (v0.2.0).

0 голосов
/ 20 мая 2018

Если X, Y и Z являются столбцами вашего набора данных, то вы можете просто использовать функцию apply для каждого столбца в вашем наборе данных в R, и это будет печатать все необходимые статистические данные, например:

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

Я имею в виду, что в общем случае вы указали бы фрейм данных в первом аргументе.Затем выберите строки / столбцы или список (например, 2 - столбец, 1 - строка для матрицы / df) в зависимости от типа структуры, для которой вы используете функцию.И, наконец, функция, применяемая к каждой из этих строк / столбцов списка, как указано в предыдущем аргументе.В этом случае мы использовали функцию c для вывода как длины NA, так и сводки данных (min, max, квартили).В качестве расширения мы можем указать любой аргумент здесь, в общем случае:

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

Было бы предпочтительно прочитать файл справки R для каких-либо дополнительных требований!

Надеюсь, это поможет;Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...