R - автоматизировать исключение из функции quantile_split - PullRequest
1 голос
/ 27 мая 2020

У меня есть фрейм данных, который выглядит следующим образом:

Var1 Var2 Var3
100  B    15
200  A    16
700  A    13
500  C    10

Это просто данные предварительного просмотра, на самом деле в нем более 10000 строк.

Я делаю следующее:

data %>%
  group_by(Var2) %>%
  mutate(Tercile = fabricatr::split_quantile(Var3, 3)) %>%
  group_by(Var2, Tercile) %>%
  summarise(Var1 = mean(Var1))

Это приводит к следующему сообщению об ошибке:

  The `x` argument provided to quantile split must be non-null and length at least 2.

Насколько я понимаю, это означает, что для некоторых значений Var2 существует только 1 уникальное значение Var3 и терцильный раскол не может быть осуществлен. Мой первый вопрос: Правильно ли это толкование ? Меня смущает часть, в которой написано "length at least 2", потому что я ожидаю, что длина должна быть не менее 3 для выполнения терцильного разделения, верно?

Если интерпретация верна, мой второй вопрос: Как автоматизировать исключение таких случаев ? У меня почти не хватает времени, чтобы go пройти примерно 300 значений Var2 и изучить значения Var3. Мне нужно решение для кодирования, исключающее такие уровни Var2, чтобы упомянутая ранее ошибка не появлялась.

1 Ответ

1 голос
/ 27 мая 2020

Как говорится в сообщении об ошибке, split_quantile нужен вектор не менее длины 2, мы можем удалить группы, в которых строки меньше 2, а затем применить функцию?

library(dplyr)

data %>%
  group_by(Var2) %>%
  filter(n() >= 2) %>%
  mutate(Tercile = fabricatr::split_quantile(Var3, 3)) %>%
  group_by(Var2, Tercile) %>%
  summarise(Var1 = mean(Var1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...