Я пытаюсь преобразовать конвейерную последовательность операторов в функцию R или аналогичную (в идеале, используя Tidyverse).
Входные данные представляют собой аккуратный фрейм данных с ответами на 15 вопросов в качестве переменных и каждым из 10наблюдения представляют собой один из 4 стандартных ответов (например, согласен, не согласен и т. д.)
Выходные данные должны представлять собой сводку ответов с указанием количества и процента распределения ответов / наблюдений для каждого вопроса / переменной.
Чтобы избежать копирования и вставки, а также для улучшения кода, я хотел бы обернуть функцию или аналогичную функцию для вычисления количества и процентов в цикле, на карте Пурра или аналогичную для итерации по 15 вопросам.
Спасибо за ваши предложения.
Приведенный ниже код работает, как и ожидалось, и отвечает таблицей вопросов, подсчета и процентов со значениями для «Согласен» и т. Д. В конечном счете, это то, чего я пытаюсь достичьв масштабе и элегантно.
DF %>%
select(question) %>%
group_by(question) %>%
summarise(Count = n()) %>%
mutate (Percentage = round(100 * Count / sum(Count),0))
Фон
Я начинаю сtidy dataframe:
*'data.frame': 10 obs. of 15 variables:
$ Question1 : Factor w/ 4 levels "Agree","Neither agree nor disagree",..: 1 1 1 1 1 1 1 1 1 1 ...*
Следующее приближает меня без процентов:
DF_as_list <- DF %>%
map(summary)
путем создания
*List of 15
$ Question1 : Named int [1:4] 10 0 0 0
..- attr(*, "names")= chr [1:4] "Agree" "Neither agree nor disagree" "Disagree" "Don't know"*
И менее полезного
> DF_from_list<- data.frame(matrix(unlist(DF_as_list),
> nrow=length(DF_as_list), byrow=T))
создает:
*'data.frame': 15 obs. of 4 variables:
$ X1: int 10 10 ...
$ X2: int 0 0 ...
$ X3: int 0 0 ...
$ X4: int 0 0 ...*
Наконец,
DF_as_tibble <- as_tibble(DF_as_list)
создает полезную сводную таблицу
*Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of 15 variables:
$ Question1 : int 10 0 0 0
$ Question2 : int 10 0 0 0*
и
DF_as_tibble %>%
map(summary)
производит полезную сводную статистику (мин, медиана, среднее, макс, 1-й и 3-й кв), но не процентное распределение ответов.