Неравные уровни факторов: принуждение к символу и вектору привязки символов, приведение к характеру и фактору привязки символов - PullRequest
0 голосов
/ 23 октября 2019

Я не уверен, в чем здесь проблема.

dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>% 
  dplyr::group_by(group) %>% 
  mutate(bin = OneR::bin(x, nbins = 10))

Неравные уровни факторов: приведение к символьно-привязанному символу и вектору-фактору, приведение к символьно-векторному связыванию символов и векторов-факторов, приведение к векторному символу

Но это работает, когда добавляется labels = 1:10.

dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>% 
  dplyr::group_by(group) %>% 
  mutate(bin = OneR::bin(x, nbins = 10, labels = 1:10))

Хотелось бы узнать причину ошибки в первом случае.

1 Ответ

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

Ну, как заметил Мэтт, это скорее предупреждение, чем ошибка. Предупреждение основано на том факте, что ваши корзины зависят от данных в каждой группе. Поскольку имена бинов (aka labels) устанавливаются автоматически, вы получаете разные уровни факторов для каждой группы. Внутренне dplyr связывает все группы вместе, по сути, вы присоединяетесь к ним. При объединении метки неравного фактора не должны совпадать друг с другом (вы просто видите строки, но они сохраняются в виде числовых значений внизу). Поскольку вы предпочитаете хранить метку каждого значения, а не числовое значение, dplyr преобразует его в символы. Посмотрите этот пример, где я делаю группировку вручную:

set.seed(0)
dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>% 
 dplyr::group_by(group) %>% 
  mutate(bin = OneR::bin(x, nbins = 10))

set.seed(0)
data1 <- dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>% 
  filter(group == "a") %>% 
  mutate(bin = OneR::bin(x, nbins = 10))

set.seed(0)
data2 <- dplyr::tibble(x = rnorm(100), group = rep(c('a','b'), 50)) %>% 
  filter(group == "b") %>% 
  mutate(bin = OneR::bin(x, nbins = 10))

# same warning pops out
bind_rows(data1, data2)
...