#r #latex #summary #stargazer
#r #Латекс #Краткие сведения #звездочет
Вопрос:
Мне было интересно, есть ли способ создать достойную сводную таблицу статистики по нескольким категориям (группам) с использованием stargazer()
. Я начал со следующего кода, но я не уверен, как продвигаться дальше.
library(mtcars)
mtcars2 <- within(mtcars, {
vs <- factor(vs, labels = c("V", "S"))
am <- factor(am, labels = c("automatic", "manual"))
cyl <- ordered(cyl)
gear <- ordered(gear)
carb <- ordered(carb)
})
summary1 = summary(mtcars2)
stargazer(summary1)
Это дает мне следующую ошибку:
Ошибка в именах (x) <- значение: атрибут ‘names’ [11] должен иметь ту же длину, что и вектор [3]
Используя stargazer()
или другие сопоставимые пакеты, я хочу создать сводную таблицу статистики, классифицированную по transmission ( am
) и engine ( vs
), которая будет представлена следующим образом.
Комментарии:
1. Что вы пробовали использовать
stargazer()
? Не могли бы вы включить код, который вы пытались выделить, чтобы выделить проблемы с кодированием stargazer, которые у вас есть?2. @Peter Я попытался
stargazer(summary)
и получилError in names(x) <- value : 'names' attribute [11] must be the same length as the vector [3]
, но даже если я решу эту проблему, мой код все равно не реализует приведенную выше таблицу. Я хочу знать, как кодировать, прежде чем подавать заявкуstargazer()
.3. Пожалуйста, включите этот код и ошибку в вопрос, поскольку это ваша проблема с кодированием. Где
summary
определено, укажите, как вы решили эту проблему, и покажите, что вы получаете, чтобы было легко увидеть, в чем проблема (проблемы).4. @Питер, я только что обновил ее.
Ответ №1:
Вы можете добиться чего-то подобного с datasummary
помощью функции из modelsummary
пакета (отказ от ответственности: я сопровождающий). Подробное описание и множество примеров вы найдете на веб-сайте пакетов.
Загрузите библиотеку и определите пользовательскую функцию для создания среднего значения /- sd. Мы используем обратные метки, потому что имя нашей функции содержит пробелы. Обратите внимание, что из-за символа Юникода это может не работать в Windows.
library(modelsummary)
`Mean ± SD` <- function(x) {
sprintf("%.0f ± %.0f", round(mean(x)), round(sd(x)))
}
Очистка меток переменных:
dat <- mtcars
dat$am = ifelse(dat$am == 0, "automatic", "manual")
dat$vs = ifelse(dat$vs == 0, "v-shaped", "straight")
Наконец, мы используем datasummary
для создания таблицы. Несколько вещей, на которые следует обратить внимание:
- Строки идут в левой части формулы
- Столбцы идут в правой части формулы
- Статистика и переменные, объединенные символом a
- Статистика и переменные, объединенные символом a
*
, будут «вложены» друг в друга. - Круглые скобки можно использовать для вложения нескольких переменных / статистики
1
это сокращение для «всех».
Подробные инструкции и примеры вы найдете на веб-сайте пакета. Эту таблицу можно экспортировать в HTML, LaTeX, Word и другие форматы, используя output
аргумент:
datasummary(
mpg * (Min Max `Mean ± SD`)
hp * (Min Max `Mean ± SD`)
wt * (Min Max `Mean ± SD`) ~
am * vs 1,
data = dat)
Альтернативный подход заключается в том, чтобы заранее изменить форму данных. При этом вам не нужно указывать каждую переменную по отдельности в формуле:
library(tidyverse)
dat <- mtcars %>%
select(mpg, wt, hp, am, vs) |>
mutate(am = ifelse(am == 0, "automatic", "manual"),
vs = ifelse(vs == 0, "v-shaped", "straight")) |>
pivot_longer(cols = c("mpg", "wt", "hp"),
names_to = "variables")
datasummary(
variables * (Min Max `Mean ± SD`) ~ value * am * vs Heading(`All`) * value,
data = dat)