R使用dplyr计算组内不同数量的值的数量

时间:2018-05-20 03:28:41

标签: r group-by count dplyr mutate

我想计算每个ID值的不同颜色数量的数量,我希望结果数据帧是原始数据帧+另一个名为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做另外一种方式吗?

2 个答案:

答案 0 :(得分:1)

根据@akrun和@ DominicComtois上面的评论,一旦我指定我使用dplyr中的mutate使用“dplyr :: mutate”而不仅仅是“mutate”

答案 1 :(得分:1)

一些注意事项:

# 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()