Search code examples
rstringdplyrrow

How to replace and delete different underscore in a single name row


Let's suppose I have this situation

data = data.frame('A' = c('A_A_', 'B_B_'))

A_A_ where I would like to remove the final and replace the central underscore. What can I do to save the following two steps?

data %>% 
  mutate(A = sub("_$","", A)) %>% 
  mutate(A = sub("_","->", A))

Thanks


Solution

  • An unwieldy base::strsplit

    paste0(unlist(strsplit(data$A, split = '_'))
    [1:length(unlist(strsplit(data$A, split = '_'))) %% 2 == 1],
    '->',
    unlist(strsplit(data$A, split = '_'))
    [1:length(unlist(strsplit(data$A, split = '_'))) %% 2 == 0])
    [1] "A->A" "B->B"
    

    that likely wouldn't be called a 'one-liner'...