J'ai l'une des colonnes dans la trame de données comme suit. Besoin d'obtenir la sortie comme indiqué.
Data : NM_001104633|0|Sema3d|- NM_0011042|0|XYZ|- NM_0956|0|ghd|+ Required output : Sema3d XYZ ghd
5 Réponses :
x = c("NM_001104633|0|Sema3d|-", "NM_0011042|0|XYZ|-", "NM_0956|0|ghd|+") sub(".*0\\|(.*)\\|[+|-]", "\\1", x) #[1] "Sema3d" "XYZ" "ghd" #OR sapply(strsplit(x, "\\|"), function(s) s[3]) #[1] "Sema3d" "XYZ" "ghd" #OR sapply(x, function(s){ inds = gregexpr("\\|", s)[[1]] substring(s, inds[2] + 1, inds[3] - 1) }, USE.NAMES = FALSE) #[1] "Sema3d" "XYZ" "ghd"
Nous pouvons utiliser read.table code> pour les séparer dans différentes colonnes, puis sélectionnez celui que nous intéressons.
df <- structure(list(V1 = c("NM_001104633|0|Sema3d|-", "NM_0011042|0|XYZ|-",
"NM_0956|0|ghd|+")), class = "data.frame", row.names = c(NA, -3L))
La regex suivante prend tout texte entre la dernière paire de démo p> | code> suivi d'un
+ code> ou d'un
- p>. p>.
([^ \ |] *) (? = \ | (\ + | -)) code> p>
Nous pouvons utiliser ou en utilisant sous code> à partir de
base r code>
gsub code> P>
x <- c("NM_001104633|0|Sema3d|-", "NM_0011042|0|XYZ|-", "NM_0956|0|ghd|+")
Le package Leggle em> offre une alternative lisible, sinon aussi efficace: ou dans la trame de données directement: p>