#r #dplyr #summary
#r #dplyr #Краткие сведения
Вопрос:
У меня есть фрейм данных с переменными разного типа (числовыми, символьными, коэффициентами) в столбцах, которые я бы хотел сразу суммировать. У меня есть столбец ID, который нужно подсчитывать в соответствии с уровнями других столбцов.
Каждый столбец имеет разные уровни, если они являются символами или факторами, и я хотел бы знать частоту идентификаторов для каждого уровня. Кроме того, если столбец является числовым, я хотел бы вернуть сводную статистику, такую как среднее значение, sd и квантили.
В идеале я бы сделал это с dplyr
group_by()
summarise()
помощью функций with и, но для этого мне нужно группировать каждый столбец за раз, а затем указывать, хочу ли я, чтобы он считался с n()
помощью или мне нужна сводная статистика из-за того, что она числовая. В SAS
нем есть команда, известная как PROC FREQ
, которую я пытаюсь воспроизвести.
df<-
data.frame(
ID = c(1,2,3,4,5,6),
Age = c(20, 30, 45, 60, 70, 18),
Car = c("Zum", "Yat", "Zum", "Zum", "Yat", "Rel"),
Side = c("Left", "Right", "Left", "Left", "Right", "Right")
)
Результат:
df %>% group_by(Car) %>% summarise(n = n())
df %>% group_by(Side) %>% summarise(n = n())
df %>% summarise(mean = mean(Age))
Я хотел бы получить этот результат в одном выводе и для многих переменных. Мой реальный df содержит десятки столбцов, которые должны либо группировать переменные, либо нет, в зависимости от их природы. Кроме того ID
, они могут быть даже повторены с теми же значениями для суммирования наблюдений.
Ответ №1:
Вы могли бы написать функцию для выполнения действий на основе ее класса. Здесь мы вычисляем среднее значение, если класс столбца числовой или выполняется count
из уникальных значений в столбце.
library(dplyr)
purrr::map(names(df)[-1], function(x) {
if(is.numeric(df[[x]])) df %>% summarise(mean = mean(.data[[x]]))
else df %>% count(.data[[x]])
})
#[[1]]
# mean
#1 40.5
#[[2]]
# Car n
#1 Rel 1
#2 Yat 2
#3 Zum 3
#[[3]]
# Side n
#1 Left 3
#2 Right 3