如何使用dplyr将分组列中的列的顺序计数附加到新列中

时间:2017-09-22 02:12:17

标签: r dplyr tidyverse

我有以下数据框:

library(tidyverse)

dat <- data.frame(foo=c(1, 1, 2, 3, 3, 3), bar=c('a', 'a', 'b', 'b', 'c', 'd'))
dat
#>   foo bar
#> 1   1   a
#> 2   1   a
#> 3   2   b
#> 4   3   b
#> 5   3   c
#> 6   3   d

我想要做的是创建一个新列,bar列标记其成员的顺序计数,从而产生:

  foo bar new_column
   1   a   a.sample.1
   1   a   a.sample.2
   2   b   b.sample.1
   3   b   b.sample.2
   3   c   c.sample.1
   3   d   d.sample.1

我坚持使用这段代码:

> dat %>% group_by(bar) %>% summarise(n=n())
# A tibble: 4 x 2
     bar     n
  <fctr> <int>
1      a     2
2      b     2
3      c     1
4      d     1

2 个答案:

答案 0 :(得分:2)

您可以使用group_by %>% mutate

dat %>% group_by(bar) %>% mutate(new_column = paste(bar, 'sample', 1:n(), sep = "."))

# A tibble: 6 x 3
# Groups:   bar [4]
#    foo    bar new_column
#  <dbl> <fctr>      <chr>
#1     1      a a.sample.1
#2     1      a a.sample.2
#3     2      b b.sample.1
#4     3      b b.sample.2
#5     3      c c.sample.1
#6     3      d d.sample.1

答案 1 :(得分:1)

    dat%>%group_by(bar)%>%mutate(new_column=paste0(bar,'.','sample.',row_number()))
# A tibble: 6 x 3
# Groups:   bar [4]
    foo    bar new_column
  <dbl> <fctr>      <chr>
1     1      a a.sample.1
2     1      a a.sample.2
3     2      b b.sample.1
4     3      b b.sample.2
5     3      c c.sample.1
6     3      d d.sample.1