Создать пропорциональные таблицы одной переменной со списком переменных - PullRequest
1 голос
/ 11 февраля 2020

Это, наверное, очень простой вопрос, но я не могу понять это.

Я создал пропорциональную таблицу из двух переменных:

mtcars %>%
  group_by(cyl, carb)%>%
  summarise(n=n())%>%
  mutate(prop=n/sum(n))%>%
  subset(select=c("cyl", "carb", "prop"))%>%
  spread(cyl, prop)%>%
  kable()

Теперь я хочу создать несколько таблиц с цилиндром в качестве одной переменной и циклическим просмотром списка нескольких переменных для второй переменной. Это был один подход, который я попробовал, но он не сработал:

cols = c('vs', 'am', 'gear', 'carb')
for (q in cols) {
  map2(~prop.table(table(mtcars[[q]], mtcars[["cyl"]])))
}

Заранее благодарен за любую помощь!

1 Ответ

0 голосов
/ 11 февраля 2020

Здесь мы можем использовать map до l oop над столбцами вместо for + map2, чтобы вернуть list вывода

library(purrr)
lst1 <-  map(cols, ~ prop.table(table(mtcars[[.x]], mtcars[["cyl"]])))
lst1
#[[1]]

#          4       6       8
#  0 0.03125 0.09375 0.43750
#  1 0.31250 0.12500 0.00000

#[[2]]

#          4       6       8
#  0 0.09375 0.12500 0.37500
#  1 0.25000 0.09375 0.06250

#[[3]]

#          4       6       8
#  3 0.03125 0.06250 0.37500
#  4 0.25000 0.12500 0.00000
#  5 0.06250 0.03125 0.06250

#[[4]]

#          4       6       8
#  1 0.15625 0.06250 0.00000
#  2 0.18750 0.00000 0.12500
#  3 0.00000 0.00000 0.09375
#  4 0.00000 0.12500 0.18750
#  6 0.00000 0.03125 0.00000
#  8 0.00000 0.00000 0.03125

Если мы хотим использовать tidyverse функции

library(dplyr)
library(tidyr)
map(cols, ~ mtcars %>%
               group_by_at(vars(cyl, .x)) %>%
               summarise(n = n()) %>%
               mutate(prop = n/sum(n)) %>% 
               select(cyl, !!.x, prop) %>%
               pivot_wider(names_from = cyl, values_from = prop))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...