Ошибка при использовании n () внутри summarise_at () - PullRequest
1 голос
/ 27 сентября 2019

При использовании n () в summarise_at () я получаю эту ошибку:

Error: n() should only be called in a data context
Call `rlang::last_error()` to see a backtrace

Другие считают, что это может быть проблема маскировки dplyr с plyr, два решения:

  1. Заменить summarise_at() на `dplyr :: summarise_at () '
  2. Call detach("package:plyr", unload=TRUE)

Ни одна не удалила эту ошибку, и мне любопытночтобы понять, что вызывает это.Вот воспроизводимый пример, который должен привести к той же ошибке:

Df <- data.frame(
  Condition = c(rep("No", 20), rep("Yes",20)),
  Height = c(rep(1,10),rep(2,10),rep(1,10),rep(2,10)),
  Weight = c(rep(10,5),rep(20,5),rep(30,5), rep(40,5))
)

x <- c("Height","Weight")

Df %>% 
  group_by(Condition) %>% 
  summarise_at(vars(one_of(x)), c(mean = mean, sd = sd, count = n()))

Примечание. Если удалить count = n(), код запускается без проблем

1 Ответ

4 голосов
/ 27 сентября 2019

Я полагаю, это потому, что n() работает на самом источнике данных в mutate, filter или summarize, поэтому не является векторизованной функцией.Просто используйте length вместо векторизованной версии.

Df %>% 
  group_by(Condition) %>% 
  summarise_at(vars(one_of(x)), c(mean = mean, sd = sd, count = length))

Если вы хотите иметь только один столбец подсчета, тогда:

Df %>% 
  group_by(Condition) %>%
  mutate(count = n()) %>%
  group_by(Condition, count) %>%
  summarise_at(vars(one_of(x)), c(mean = mean, sd = sd))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...