-1
votes

Extraire sous-ensemble de la chaîne dans la colonne Dataframe

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


0 commentaires

5 Réponses :


1
votes
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"

0 commentaires

1
votes

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))


0 commentaires

0
votes

La regex suivante prend tout texte entre la dernière paire de | suivi d'un + ou d'un - . .

([^ \ |] *) (? = \ | (\ + | -))

démo


0 commentaires

0
votes

Nous pouvons utiliser sous code> à partir de base r code> xxx pré>


ou en utilisant gsub code> P>

x <- c("NM_001104633|0|Sema3d|-", "NM_0011042|0|XYZ|-", "NM_0956|0|ghd|+")


0 commentaires

0
votes

Le package Leggle offre une alternative lisible, sinon aussi efficace: xxx

ou dans la trame de données directement: xxx < / pré>


0 commentaires