Как сгенерировать суффикс увеличивающегося числа для повторяющихся значений в столбце? - PullRequest
0 голосов
/ 07 мая 2020

Итак, у меня есть столбец, состоящий из названий видов:

species
Dasyatis pastinaca
Amblyraja radiata
Raja montagui
Raja montagui
Dasyatis pastinaca
Himantura imbricata
Mobula thurstoni
Raja montagui
Mobula thurstoni
Dalatias licha

Как вы можете видеть, многие из них повторяются, и я пытаюсь для каждого набора повторяющихся имен добавить суффикс, который является их идентификационным номером. В основном это результат, который я ищу:

Dasyatis pastinaca_01
Amblyraja radiata_01
Raja montagui_01
Raja montagui_02
Dasyatis pastinaca_02
Himantura imbricata_01
Mobula thurstoni_01
Raja montagui_03
Mobula thurstoni_02
Dalatias licha_01

Я пробовал некоторые вещи, которые потерпели неудачу 100%

1 Ответ

0 голосов
/ 08 мая 2020

Это даст вам ожидаемый результат:

library(tidyverse)

dataframe <- tibble(
  species = c(
    'Dasyatis pastinaca',
    'Amblyraja radiata',
    'Raja montagui',
    'Raja montagui',
    'Dasyatis pastinaca',
    'Himantura imbricata',
    'Mobula thurstoni',
    'Raja montagui',
    'Mobula thurstoni',
    'Dalatias licha'
  )
)

Вы можете сделать это так:

dataframe %>%
  group_by(species) %>%
  mutate(species2 = str_c(species, '_', str_pad(row_number(), 2, pad = '0')))
#> # A tibble: 10 x 2
#> # Groups:   species [6]
#>    species             species2              
#>    <chr>               <chr>                 
#>  1 Dasyatis pastinaca  Dasyatis pastinaca_01 
#>  2 Amblyraja radiata   Amblyraja radiata_01  
#>  3 Raja montagui       Raja montagui_01      
#>  4 Raja montagui       Raja montagui_02      
#>  5 Dasyatis pastinaca  Dasyatis pastinaca_02 
#>  6 Himantura imbricata Himantura imbricata_01
#>  7 Mobula thurstoni    Mobula thurstoni_01   
#>  8 Raja montagui       Raja montagui_03      
#>  9 Mobula thurstoni    Mobula thurstoni_02   
#> 10 Dalatias licha      Dalatias licha_01

Потому что species столбец является группирующим, вы не можете изменить Это. Позже вы можете изменить имя нового столбца на старое:

dataframe %>%
  group_by(species) %>%
  mutate(species2 = str_c(species, '_', str_pad(row_number(), 2, pad = '0'))) %>% 
  ungroup() %>% 
  select(-species) %>% 
  rename(species = species2)
#> # A tibble: 10 x 1
#>    species               
#>    <chr>                 
#>  1 Dasyatis pastinaca_01 
#>  2 Amblyraja radiata_01  
#>  3 Raja montagui_01      
#>  4 Raja montagui_02      
#>  5 Dasyatis pastinaca_02 
#>  6 Himantura imbricata_01
#>  7 Mobula thurstoni_01   
#>  8 Raja montagui_03      
#>  9 Mobula thurstoni_02   
#> 10 Dalatias licha_01

Создано 08.05.2020 пакетом REPEX (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...