I have a data frame as below, and want to sort by id.
the sorted order is 'CKK-01', 'CKK-02', 'TTK-1','TTK-10','TTK-2'
how to make: 'CKK-01', 'CKK-02', 'TTK-1','TTK-2','TTK-10'?
When sorting by characters, since 1 is considered coming before any following number, 10 comes before 2, for example. One way to get around this would be to split the ID into its two components, the character prefix, and numeric suffix, and sort by each of those:
library(tidyverse)
employee <- c('John Doe','Peter Gynn','Jolie Hope','Linda White','new')
id <- c('CKK-01', 'CKK-02', 'TTK-1','TTK-2','TTK-10')
ds <- data.frame(employee, id)
ds %>%
separate(id, into = c("prefix", "suffux"), sep = "-", remove = FALSE,
convert = TRUE) %>%
arrange(prefix, suffux)
#> employee id prefix suffux
#> 1 John Doe CKK-01 CKK 1
#> 2 Peter Gynn CKK-02 CKK 2
#> 3 Jolie Hope TTK-1 TTK 1
#> 4 Linda White TTK-2 TTK 2
#> 5 new TTK-10 TTK 10