汇总和group_by连续使用两个不同的列

时间:2017-04-26 12:32:19

标签: r dataframe dplyr

我的数据框df包含三列abc

df <- data.frame(a = c('a','b','c','d','e','f','g','e','f','g'), 
                 b = c('X','Y','Z','X','Y','Z','X','X','Y','Z'),
                 c = c('cat','dog','cat','dog','cat','cat','dog','cat','cat','dog'))
df

# output
   a b   c
1  a X cat
2  b Y dog
3  c Z cat
4  d X dog
5  e Y cat
6  f Z cat
7  g X dog
8  e X cat
9  f Y cat
10 g Z dog

我必须group_by使用b列,然后summarise使用c列,其中包含可用值的计数。

df %>% group_by(b) %>% 
  summarise(nCat = sum(c == 'cat'), 
            nDog = sum(c == 'dog')) 
#output
# A tibble: 3 × 3
       b  nCat  nDog
  <fctr> <int> <int>
1      X     2     2
2      Y     2     1
3      Z     2     1

但是,在执行上述任务之前,我应该删除a中属于b中具有多个值的值的行。

df %>% group_by(a) %>% summarise(count = n())
#output
# A tibble: 7 × 2
       a count
  <fctr> <int>
1      a     1
2      b     1
3      c     1
4      d     1
5      e     2
6      f     2
7      g     2

例如,在此数据框中,所有行的值均为e(值:YX),f(值:Z,列Y中的g),X(值:Za)。

# Expected output
# A tibble: 3 × 3
       b  nCat  nDog
  <fctr> <int> <int>
1      X     1     1
2      Y     0     1
3      Z     1     0

1 个答案:

答案 0 :(得分:3)

我们可以filtern_distinct一起使用来过滤'b'中每个'a'组只有一个唯一元素的值,然后按'b'分组,我们执行{{ 1}}

summarise