#r #list #stargazer
#r #Список #звездочет
Вопрос:
Я хотел бы получить фрейм данных для каждого элемента списка из объекта списка. Ниже приведен пример
mtcars_sumstat <- mtcars %>%
select(mpg:qsec,am) %>%
as.data.frame() %>%
split(.$am) %>%
walk(~stargazer(.,type = "text",
summary.stat = c ("n", "mean", "sd")))
mtcars_sumstat
=============================
Statistic N Mean St. Dev.
-----------------------------
mpg 19 17.147 3.834
cyl 19 6.947 1.545
disp 19 290.379 110.172
hp 19 160.263 53.908
drat 19 3.286 0.392
wt 19 3.769 0.777
qsec 19 18.183 1.751
am 19 0.000 0.000
-----------------------------
=============================
Statistic N Mean St. Dev.
-----------------------------
mpg 13 24.392 6.167
cyl 13 5.077 1.553
disp 13 143.531 87.204
hp 13 126.846 84.062
drat 13 4.050 0.364
wt 13 2.411 0.617
qsec 13 17.360 1.792
am 13 1.000 0.000
-----------------------------
Когда я запускаю следующий код, я получаю два фрейма данных для 2 элементов списка; Но эти фреймы данных содержат фактические данные, а не приведенную выше сводную статистику.
list2env(mtcars_sumstat,.GlobalEnv)
По сути, я хочу, чтобы приведенная выше сводная статистика содержалась в двух отдельных фреймах данных в качестве ОБЪЕКТА фрейма данных в «ГЛОБАЛЬНОЙ СРЕДЕ». Могу ли я как-нибудь это сделать? Фрейм данных должен выглядеть следующим образом как ОБЪЕКТ фрейма данных —
Statistic N Mean St. Dev.
mpg 13 24.392 6.167
cyl 13 5.077 1.553
disp 13 143.531 87.204
hp 13 126.846 84.062
drat 13 4.050 0.364
wt 13 2.411 0.617
qsec 13 17.360 1.792
am 13 1.000 0.000
Ответ №1:
Обновление для комментариев OP
Может быть проще просто использовать стандартные dplyr
манипуляции для получения сводной статистики. Используйте pivot_longer
, group_by
, и summarise
:
mtcars %>%
select(mpg:qsec, am) %>%
pivot_longer(-am) %>%
group_by(am, name) %>%
summarise(across(value, .fns=list(mean = mean, sd = sd, n = length), .names = "{fn}")) %>%
group_split()
Вывод:
$`0`
# A tibble: 7 x 5
# Groups: am [1]
am name mean sd n
<dbl> <chr> <dbl> <dbl> <int>
1 0 cyl 6.95 1.54 19
2 0 disp 290. 110. 19
3 0 drat 3.29 0.392 19
4 0 hp 160. 53.9 19
5 0 mpg 17.1 3.83 19
6 0 qsec 18.2 1.75 19
7 0 wt 3.77 0.777 19
#r #list #stargazer
#r #Список #звездочет
Вопрос:
Я хотел бы получить фрейм данных для каждого элемента списка из объекта списка. Ниже приведен пример
mtcars_sumstat <- mtcars %>%
select(mpg:qsec,am) %>%
as.data.frame() %>%
split(.$am) %>%
walk(~stargazer(.,type = "text",
summary.stat = c ("n", "mean", "sd")))
mtcars_sumstat
=============================
Statistic N Mean St. Dev.
-----------------------------
mpg 19 17.147 3.834
cyl 19 6.947 1.545
disp 19 290.379 110.172
hp 19 160.263 53.908
drat 19 3.286 0.392
wt 19 3.769 0.777
qsec 19 18.183 1.751
am 19 0.000 0.000
-----------------------------
=============================
Statistic N Mean St. Dev.
-----------------------------
mpg 13 24.392 6.167
cyl 13 5.077 1.553
disp 13 143.531 87.204
hp 13 126.846 84.062
drat 13 4.050 0.364
wt 13 2.411 0.617
qsec 13 17.360 1.792
am 13 1.000 0.000
-----------------------------
Когда я запускаю следующий код, я получаю два фрейма данных для 2 элементов списка; Но эти фреймы данных содержат фактические данные, а не приведенную выше сводную статистику.
list2env(mtcars_sumstat,.GlobalEnv)
По сути, я хочу, чтобы приведенная выше сводная статистика содержалась в двух отдельных фреймах данных в качестве ОБЪЕКТА фрейма данных в "ГЛОБАЛЬНОЙ СРЕДЕ". Могу ли я как-нибудь это сделать? Фрейм данных должен выглядеть следующим образом как ОБЪЕКТ фрейма данных -
Statistic N Mean St. Dev.
mpg 13 24.392 6.167
cyl 13 5.077 1.553
disp 13 143.531 87.204
hp 13 126.846 84.062
drat 13 4.050 0.364
wt 13 2.411 0.617
qsec 13 17.360 1.792
am 13 1.000 0.000
Ответ №1:
Обновление для комментариев OP
Может быть проще просто использовать стандартные dplyr
манипуляции для получения сводной статистики. Используйте pivot_longer
, group_by
, и summarise
:
mtcars %>%
select(mpg:qsec, am) %>%
pivot_longer(-am) %>%
group_by(am, name) %>%
summarise(across(value, .fns=list(mean = mean, sd = sd, n = length), .names = "{fn}")) %>%
group_split()
Вывод:
1`
# A tibble: 7 x 5
# Groups: am [1]
am name mean sd n
<dbl> <chr> <dbl> <dbl> <int>
1 1 cyl 5.08 1.55 13
2 1 disp 144. 87.2 13
3 1 drat 4.05 0.364 13
4 1 hp 127. 84.1 13
5 1 mpg 24.4 6.17 13
6 1 qsec 17.4 1.79 13
7 1 wt 2.41 0.617 13
Предыдущий ответ
Измените walk
на map
и добавьте map(tibble)
:
mtcars_sumstat <- mtcars %>%
select(mpg:qsec,am) %>%
as.data.frame() %>%
split(.$am) %>%
map_df(~stargazer(.,type = "text", summary.stat = c ("n", "mean", "sd"))) %>%
map(tibble)
Вывод:
mtcars_sumstat
$`0`
# A tibble: 13 x 1
`<chr>`
<chr>
1 ""
2 "============================="
3 "Statistic N Mean St. Dev."
4 "-----------------------------"
5 "mpg 19 17.147 3.834 "
6 "cyl 19 6.947 1.545 "
7 "disp 19 290.379 110.172 "
8 "hp 19 160.263 53.908 "
9 "drat 19 3.286 0.392 "
10 "wt 19 3.769 0.777 "
11 "qsec 19 18.183 1.751 "
12 "am 19 0.000 0.000 "
13 "-----------------------------"
#r #list #stargazer
#r #Список #звездочет
Вопрос:
Я хотел бы получить фрейм данных для каждого элемента списка из объекта списка. Ниже приведен пример
mtcars_sumstat <- mtcars %>%
select(mpg:qsec,am) %>%
as.data.frame() %>%
split(.$am) %>%
walk(~stargazer(.,type = "text",
summary.stat = c ("n", "mean", "sd")))
mtcars_sumstat
=============================
Statistic N Mean St. Dev.
-----------------------------
mpg 19 17.147 3.834
cyl 19 6.947 1.545
disp 19 290.379 110.172
hp 19 160.263 53.908
drat 19 3.286 0.392
wt 19 3.769 0.777
qsec 19 18.183 1.751
am 19 0.000 0.000
-----------------------------
=============================
Statistic N Mean St. Dev.
-----------------------------
mpg 13 24.392 6.167
cyl 13 5.077 1.553
disp 13 143.531 87.204
hp 13 126.846 84.062
drat 13 4.050 0.364
wt 13 2.411 0.617
qsec 13 17.360 1.792
am 13 1.000 0.000
-----------------------------
Когда я запускаю следующий код, я получаю два фрейма данных для 2 элементов списка; Но эти фреймы данных содержат фактические данные, а не приведенную выше сводную статистику.
list2env(mtcars_sumstat,.GlobalEnv)
По сути, я хочу, чтобы приведенная выше сводная статистика содержалась в двух отдельных фреймах данных в качестве ОБЪЕКТА фрейма данных в "ГЛОБАЛЬНОЙ СРЕДЕ". Могу ли я как-нибудь это сделать? Фрейм данных должен выглядеть следующим образом как ОБЪЕКТ фрейма данных -
Statistic N Mean St. Dev.
mpg 13 24.392 6.167
cyl 13 5.077 1.553
disp 13 143.531 87.204
hp 13 126.846 84.062
drat 13 4.050 0.364
wt 13 2.411 0.617
qsec 13 17.360 1.792
am 13 1.000 0.000
Ответ №1:
Обновление для комментариев OP
Может быть проще просто использовать стандартные dplyr
манипуляции для получения сводной статистики. Используйте pivot_longer
, group_by
, и summarise
:
mtcars %>%
select(mpg:qsec, am) %>%
pivot_longer(-am) %>%
group_by(am, name) %>%
summarise(across(value, .fns=list(mean = mean, sd = sd, n = length), .names = "{fn}")) %>%
group_split()
Вывод:
$`0`
# A tibble: 7 x 5
# Groups: am [1]
am name mean sd n
<dbl> <chr> <dbl> <dbl> <int>
1 0 cyl 6.95 1.54 19
2 0 disp 290. 110. 19
3 0 drat 3.29 0.392 19
4 0 hp 160. 53.9 19
5 0 mpg 17.1 3.83 19
6 0 qsec 18.2 1.75 19
7 0 wt 3.77 0.777 19
#r #list #stargazer
#r #Список #звездочет
Вопрос:
Я хотел бы получить фрейм данных для каждого элемента списка из объекта списка. Ниже приведен пример
mtcars_sumstat <- mtcars %>%
select(mpg:qsec,am) %>%
as.data.frame() %>%
split(.$am) %>%
walk(~stargazer(.,type = "text",
summary.stat = c ("n", "mean", "sd")))
mtcars_sumstat
=============================
Statistic N Mean St. Dev.
-----------------------------
mpg 19 17.147 3.834
cyl 19 6.947 1.545
disp 19 290.379 110.172
hp 19 160.263 53.908
drat 19 3.286 0.392
wt 19 3.769 0.777
qsec 19 18.183 1.751
am 19 0.000 0.000
-----------------------------
=============================
Statistic N Mean St. Dev.
-----------------------------
mpg 13 24.392 6.167
cyl 13 5.077 1.553
disp 13 143.531 87.204
hp 13 126.846 84.062
drat 13 4.050 0.364
wt 13 2.411 0.617
qsec 13 17.360 1.792
am 13 1.000 0.000
-----------------------------
Когда я запускаю следующий код, я получаю два фрейма данных для 2 элементов списка; Но эти фреймы данных содержат фактические данные, а не приведенную выше сводную статистику.
list2env(mtcars_sumstat,.GlobalEnv)
По сути, я хочу, чтобы приведенная выше сводная статистика содержалась в двух отдельных фреймах данных в качестве ОБЪЕКТА фрейма данных в "ГЛОБАЛЬНОЙ СРЕДЕ". Могу ли я как-нибудь это сделать? Фрейм данных должен выглядеть следующим образом как ОБЪЕКТ фрейма данных -
Statistic N Mean St. Dev.
mpg 13 24.392 6.167
cyl 13 5.077 1.553
disp 13 143.531 87.204
hp 13 126.846 84.062
drat 13 4.050 0.364
wt 13 2.411 0.617
qsec 13 17.360 1.792
am 13 1.000 0.000
Ответ №1:
Обновление для комментариев OP
Может быть проще просто использовать стандартные dplyr
манипуляции для получения сводной статистики. Используйте pivot_longer
, group_by
, и summarise
:
mtcars %>%
select(mpg:qsec, am) %>%
pivot_longer(-am) %>%
group_by(am, name) %>%
summarise(across(value, .fns=list(mean = mean, sd = sd, n = length), .names = "{fn}")) %>%
group_split()
Вывод:
1`
# A tibble: 7 x 5
# Groups: am [1]
am name mean sd n
<dbl> <chr> <dbl> <dbl> <int>
1 1 cyl 5.08 1.55 13
2 1 disp 144. 87.2 13
3 1 drat 4.05 0.364 13
4 1 hp 127. 84.1 13
5 1 mpg 24.4 6.17 13
6 1 qsec 17.4 1.79 13
7 1 wt 2.41 0.617 13
Предыдущий ответ
Измените walk
на map
и добавьте map(tibble)
:
mtcars_sumstat <- mtcars %>%
select(mpg:qsec,am) %>%
as.data.frame() %>%
split(.$am) %>%
map_df(~stargazer(.,type = "text", summary.stat = c ("n", "mean", "sd"))) %>%
map(tibble)
Вывод:
1`
# A tibble: 13 x 1
`<chr>`
<chr>
1 ""
2 "============================="
3 "Statistic N Mean St. Dev."
4 "-----------------------------"
5 "mpg 13 24.392 6.167 "
6 "cyl 13 5.077 1.553 "
7 "disp 13 143.531 87.204 "
8 "hp 13 126.846 84.062 "
9 "drat 13 4.050 0.364 "
10 "wt 13 2.411 0.617 "
11 "qsec 13 17.360 1.792 "
12 "am 13 1.000 0.000 "
13 "-----------------------------"
Комментарии:
1. Спасибо. У вас есть идея, как можно очистить знаки «» и создать красивый фрейм данных.
2. Можете ли вы отредактировать свой пост, чтобы обеспечить ожидаемый результат? Я не уверен, что означает «хороший фрейм данных».
3. Если вам действительно нужна сводная статистика в отдельных числовых столбцах, было бы намного проще сгенерировать их с помощью обычных
dplyr
методов. Stargazer действительно предназначен для форматирования выходных данных, а не для манипулирования данными.4. На самом деле я пытаюсь работать с rmarkdown (latex) pdf для своих результатов исследования, но не знаю, как
dplyr
мне это может помочь. для этой цели.5. Хорошо, смотрите Обновленный ответ для гораздо более быстрого решения, которое не зависит от
stargazer
.