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")
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