#r #dplyr #median #sparklyr
#r #dplyr #медиана #sparklyr
Вопрос:
Я пытаюсь получить сводную статистику для данных в r, которые я извлек с помощью sparklyr, включая среднее значение и медиану. Я могу получить всю свою статистику, вручную введя все на шаге dplyr::summarize(), но хотел бы знать, есть ли способ сделать это с помощью инструкции summarize_all().
Попытка вручную работает:
test<-data%>%
dplyr::summarize(count=n(),
mean_c1=mean(column1,na.rm=TRUE),
mean_c2=mean(column2,na.rm=TRUE),
median_c1=percentile(column1,.5),
median_c2=percentile(column2,.5))
Попытка Summarize_all() работает без вызова процентиля для медианы. Это дает мне count, mean, min, max для моих данных (переменные — это вектор имен столбцов)
test<-data%>%
select(vars)%>%
dplyr::summarize_all(list(count=~n(),mean=mean, min=min,max=max))
Но я получаю ошибки при попытке добавить медиану в микс — он больше не распознает
команда percentile, которая является функцией Hive, а не функцией r / dplyr. («Ошибка в inherits(x, «fun_list»): объект ‘процентиль’ не найден»)
test<-data%>%
select(vars)%>%
dplyr::summarize_all(list(count=~n(),mean=mean, min=min,max=max,median=percentile),probs=.5)
Я попытался использовать квантиль вместо процентиля (именно так я бы сделал это с фреймом данных), но при вызове таблицы ‘test’ выдает ошибку.
Возможно ли получить медиану для таблицы spark в r с помощью команды summarize_all()? Или мне придется делать это больше вручную?
Ответ №1:
вы женаты на использовании summarize
для этого? поскольку вы уже используете tidyverse и пакет psych
поставляется с этим, так что вы могли бы просто сделать
data %>%
select(vars) %>%
psych::describe()
и получить тот же результат, более или менее.
Комментарии:
1. Я не женат на summarize_all(). Я попробовал psych::describe() и получаю ошибку. Похоже, что для функции описания требуется data.frame или матрица? У меня есть таблица spark, и я не думаю, что она будет работать с функцией describe, если я чего-то не упустил?
Ответ №2:
Пакет glue решил мою проблему.
library(rlang)
library(glue)
vars<-tbl_vars(data)
eq3<-glue("percentile({vars},.5)")%>%
setNames(paste0(vars,"_median"))%>%
lapply(parse_quosure)
test<-data%>%
dplyr::summarize(!!!eq3)