Создание универсальной таблицы описаний с использованием dplyr - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь создать простой код, который я могу использовать снова и снова (с минимальными изменениями), чтобы иметь возможность печатать таблицу сводной статистики.

Воспроизводимый пример создает таблицу с M и SD для переменной V1 с разбивкой по группам:

data <- as.data.frame(cbind(1:100, sample(1:2), rnorm(100), rnorm(100)))
names(data) <- c("ID", "Group", "V1", "V2")


library(dplyr)
descriptives <- data %>% group_by(Group) %>%
  summarize(
    Mean = mean(V2)
    , SD = sd(V2)
  )

descriptives

Я бы хотел изменить эту функцию, чтобы она вычисляла M и SD для всех переменных в моем наборе данных.

Я хотел бы иметь возможность заменить вызов V1 чем-то вроде vars, который является просто списком всех переменных в моем наборе данных; в этом примере V1 и V2. Но обычно у меня есть около 100 переменных. Причина, по которой я хочу, чтобы это работало таким образом, заключается в том, что я могу сделать что-то очень простое, например:

vars <- names(data[3:4])

и очень быстро выбрать столбцы, для которых мне нужна сводная статистика.

Несколько вещей для моего списка желаний:

M и SD для данной переменной должны быть рядом друг с другом, и я хотел бы добавить столбец над каждой парой с именем переменной.

I ' мне бы хотелось, чтобы конечный продукт выглядел примерно так:

this example table

Я бы хотел использовать dplyr, но я открыт для других вариантов. Я также хотел бы узнать, как можно переключать строки и столбцы таблицы так, чтобы переменные находились в отдельных строках, и у каждой группы был столбец (или два столбца, один для M и один для SD).

1 Ответ

2 голосов
/ 05 марта 2020

Существует ограничение в порядке, но если мы используем select, то можно изменить порядок подстрок в именах столбцов

library(dplyr)
library(stringr)
data %>%
    group_by(Group) %>% 
    summarise_at(vars(vars), list(Mean = mean, SD = sd)) %>% 
    select(Group, order(str_remove(names(.)[-1], "_.*")) + 1)
# A tibble: 2 x 5
#  Group V1_Mean V1_SD  V2_Mean V2_SD
#  <dbl>   <dbl> <dbl>    <dbl> <dbl>
#1     1   0.165 0.915  0.146   1.16 
#2     2   0.308 1.31  -0.00711 0.854
...