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>