I have the following problem:
I want to create a new column in a data frame, based in de difference between two columns, where which row is a vector of strings:
My code:
library(dplyr) # v.1.0.7
seqs <- c("seq1","seq2","seq3","seq4","seq5")
expect_mut <- c("S:T20N,S:D614G","S:T20N,S:D614G","S:T20N,N:G204R,N:G80R", "N:G204R, S:D614G", "N:G204R, S:D614G")
observed_mut <- c("S:T20N","S:D164G","S:T20N, N:G204R","S:D614G,N:G204R","S:D164G,S:T19I")
data_frame <- data.frame(seqs, expect_mut, observed_mut)
data_frame <- data_frame %>%
mutate(expect_mut = strsplit(as.character(expect_mut), ","),
observed_mut = strsplit(as.character(observed_mut), ",")) %>%
group_by(seqs) %>%
mutate(diff_mut = setdiff(observed_mut, expect_mut))
What I expect:
| seqs | expect_mut | observed_mut | diff_mut |
| ----- | ---------------------------------- | ----------------------- | ------------ |
| seq1 | c("S:T20N", "S:D614G") | S:T20N | |
| seq2 | c("S:T20N", "S:D614G") | S:D164G | S:D164G |
| seq3 | c("S:T20N", "N:G204R", "N:G80R") | c("S:T20N", " N:G204R") | |
| seq4 | c("N:G204R", "S:D614G") | c("N:G204R", "S:D614G") | |
| seq5 | c("N:G204R", "S:D614G") | c("S:D164G", "S:T19I") | c("S:D164G", "S:T19I") |
What returns:
| seqs | expect_mut | observed_mut | diff_mut |
| ----- | ---------------------------------- | ----------------------- | ------------ |
| seq1 | c("S:T20N", "S:D614G") | S:T20N | S:T20N |
| seq2 | c("S:T20N", "S:D614G") | S:D164G | S:D164G |
| seq3 | c("S:T20N", "N:G204R", "N:G80R") | c("S:T20N", " N:G204R") | c("S:T20N", " N:G204R") |
| seq4 | c("N:G204R", "S:D614G") | c("N:G204R", "S:D614G") | c("N:G204R", "S:D614G") |
| seq5 | c("N:G204R", "S:D614G") | c("S:D164G", "S:T19I") | c("S:D164G", "S:T19I") |
Basically is returning the same value of observed_mut into diff_mut column...