web-dev-qa-db-fra.com

Comment trouver une correspondance dans une chaîne basée sur le caractère d'une autre colonne?

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.

4
krtbris

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
0
Maël