2017-09-22 3 views
2

je la trame de données suivantes:Comment ajouter un compteur séquentiel d'une colonne dans une nouvelle colonne d'une colonne groupée à l'aide dplyr

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 

Ce que je veux faire est de créer une nouvelle colonne avec bar colonne marqués avec le nombre séquentiel de ses membres, ce qui:

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 

Je suis coincé avec ce code:

> 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 
+1

'avec (" .sample" dat, paste0 (bar,, ave (foo, bar, FUN = seq_along)))' ' –

Répondre

2

Vous pouvez utiliser 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 
+3

row_number()' pourrait être utilisé à la place de '1: n()' aussi. – thelatemail

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