rdplyr

How to mutate variable according the difference of to characters


library(dplyr)

raw_data <- data.frame(cat=c("a"),char_1=c("1kg|2kg"),char_2 = c("0kg|1kg|8kg"))

in raw_data how to mutate dif_char which values in char_2 and not in char1

wished_df <- raw_data %>% mutate(dif_char = "0kg|8kg")

Solution

  • You can use strsplit with rowwise:

    raw_data %>% mutate(across(matches("char_\\d"), \(x) strsplit(x, split="\\|"))) %>%
      rowwise() %>%
      mutate(dif_char = paste(setdiff(char_2, char_1), collapse="|")) 
    

    # A tibble: 2 × 4
    # Rowwise: 
      cat   char_1    char_2    dif_char 
      <chr> <list>    <list>    <chr>    
    1 a     <chr [2]> <chr [3]> "0kg|8kg"
    2 b     <chr [2]> <chr [2]> ""
    

    Data:

      cat  char_1      char_2
    1   a 1kg|2kg 0kg|1kg|8kg
    2   b 2kg|3kg     2kg|3kg