J'ai ces données:
df1 <- data.frame(matrix(, nrow=2, ncol=2))
colnames(df1) <- c("ca", "ea")
df1$ca <- c("A=C,T=G", "T=C,G=G")
df1$ea <- c("G", "T")
Et je veux faire une nouvelle colonne appelée "match" qui me donne la lettre de la colonne "CA" égale à la lettre de la colonne "EA". Donc, ma sortie ressemblerait à ceci:
df1 <- data.frame(matrix(, nrow=2, ncol=2))
colnames(df1) <- c("ca", "ea")
df1$ca <- c("A=C,T=G", "T=C,G=G")
df1$ea <- c("G", "T")
df1$match <- c("T", "C")
C'est délicat car dans le premier cas, la lettre que je veux correspondre est après le "=", mais dans le deuxième cas, il le précède.
Utilisant tidyr::separate
et dplyr::case_when
.
df1 %>% separate(ca, into = c("ca1","ca2","ca3","ca4")) %>%
mutate(match = case_when(ea == ca1 ~ ca2,
ea == ca2 ~ ca1,
ea == ca3 ~ ca4,
ea == ca4 ~ ca3))
ca1 ca2 ca3 ca4 ea match
1 A C T G G T
2 T C G G T C