R подсчитывает количество различных значений в группе, используя dplyr

Я хочу рассчитать количество различных цветов для каждого значения идентификатора, и я хочу, чтобы результирующий фрейм данных был исходным фреймом данных + еще один столбец с именем count. Из другого сообщения, задающего тот же вопрос, я получил следующий код, но этот код, похоже, не работает для меня.

    ID= c('A', 'A', 'A', 'B', 'B', 'B')
    color=c('white', 'green', 'orange', 'white', 'green', 'green')

    d = data.frame (ID, color)
    d %>%
      group_by(ID) %>%
      mutate(count = n_distinct(color))

Запустив этот код, я получил следующий результат:

      ID    color  count
      <fct> <fct>  <int>
      1 A     white      3
      2 A     green      3
      3 A     orange     3
      4 B     white      3
      5 B     green      3
      6 B     green      3

когда я хочу

      ID    color  count
      <fct> <fct>  <int>
      1 A     white      3
      2 A     green      3
      3 A     orange     3
      4 B     white      2
      5 B     green      2
      6 B     green      2

Может ли кто-нибудь сказать мне, что я делаю не так или как еще можно это сделать с помощью dplyr?


person Amazonian    schedule 20.05.2018    source источник
comment
Попробуйте %>% dplyr::mutate(count = .., так как я получаю ожидаемый результат. Возможно, вы также загрузили plyr библиотеку, и изменение будет из plyr mutate   -  person akrun    schedule 20.05.2018
comment
Подтверждаю ... ваш код в порядке. Перезапустите сеанс R и повторите попытку только с dplyr   -  person Dominic Comtois    schedule 20.05.2018
comment
@akrun, Доминик Комитоис, ты прав! выполнение dplyr :: mutate решило мою проблему!   -  person Amazonian    schedule 20.05.2018


Ответы (2)


Некоторые примечания:

# 1. Data set
df = data.frame (
  id = c('A', 'A', 'A', 'B', 'B', 'B'),
  color = c('white', 'green', 'orange', 'white', 'green', 'green'))

# 2. Desired result
df %>%
  group_by(id) %>%
  dplyr::mutate(count = n_distinct(color))

# 3. Result with a number of unique 'color's per 'id'
df %>%
  group_by(id, color) %>%
  dplyr::mutate(count = n()) %>% 
  unique()
person Andrii    schedule 20.05.2018

Согласно комментариям @akrun и @ DominicComtois выше, код работает, как только я укажу, что я использую mutate из dplyr с помощью «dplyr :: mutate», а не просто «mutate»

person Amazonian    schedule 20.05.2018