sumrize_all с функцией "n ()" - PullRequest
       17

sumrize_all с функцией "n ()"

3 голосов
/ 23 сентября 2019

Я суммирую фрейм данных в dplyr с помощью функции summarize_all().Если я сделаю следующее:

summarize_all(mydf, list(mean="mean", median="median", sd="sd"))

Я получу тиббл с 3 переменными для каждой из моих исходных мер, с суффиксом типа (среднее, медиана, sd).Большой!Но когда я пытаюсь захватить внутренний вектор n, чтобы вычислить стандартные отклонения самостоятельно и убедиться, что недостающие ячейки не учитываются ...

summarize_all(mydf, list(mean="mean", median="median", sd="sd", n="n"))

... я получаю ошибку:

Error in (function ()  : unused argument (var_a)

Это не проблема с моим var_a вектором.Если я удаляю его, я получаю ту же ошибку для var_b и т. Д. Функция summarize_all выдает странные результаты всякий раз, когда я запрашиваю n или n(), или если я использую .funs() и перечисляю нужные описаниявместо вычисления.

Что происходит?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Причина, по которой у вас возникают проблемы, заключается в том, что n() не принимает никаких аргументов, в отличие от mean() и median().Вместо этого используйте length(), чтобы получить желаемый эффект:

summarize_all(mydf, list(mean="mean", median="median", sd="sd", n="length"))
1 голос
/ 23 сентября 2019

Здесь мы можем использовать ~, если мы хотим иметь более точное управление, то есть добавлять другие параметры

library(dplyr)
mtcars %>% 
      summarise_all(list(mean = ~ mean(.), median = ~median(.), n = ~ n()))

Однако, получение n() для каждого столбца не имеет особого смысла, так какбыло бы то же самое.Вместо этого создайте n() перед выполнением summarise

mtcars %>%
   group_by(n = n()) %>%
   summarise_all(list(mean = mean, median = median))

В противном случае просто передайте функцию без кавычек

mtcars %>%
     summarise_all(list(mean = mean, median = median))
...