Использование summarize_all() для нахождения медианы в данных sparklyr

#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)