Entfernen Sie einen Teil der Zeichenfolge nach "."

73

Ich arbeite mit NCBI-Referenzsequenz-Zugangsnummern wie Variable a:

a <- c("NM_020506.1","NM_020519.1","NM_001030297.2","NM_010281.2","NM_011419.3", "NM_053155.2")  

Um Informationen aus dem biomart Paket muß ich die entfernen .1, .2usw. nach den Zugangsnummern. Normalerweise mache ich das mit diesem Code:

b <- sub("..*", "", a)

# [1] "" "" "" "" "" ""

Wie Sie sehen, ist dies jedoch nicht der richtige Weg für diese Variable. Kann mir jemand dabei helfen?

Lisann
quelle

Antworten:

102

Sie müssen nur der Periode entkommen:

a <- c("NM_020506.1","NM_020519.1","NM_001030297.2","NM_010281.2","NM_011419.3", "NM_053155.2")

gsub("\\..*","",a)
[1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155" 
Hansi
quelle
Erläuterung: Bei Funktionen im Basispaket (dh ohne andere Pakete wie string r) sind die Optionen wie angegeben: b1 <- gsub ("\\ .. *", "", a, fixed = FALSE) b2 <- sub (" \\ .. * "," ", a, fixed = FALSE) In bestimmten Fällen müssen Sie möglicherweise das fixedArgument ändern . Hier muss es jedoch eingestellt sein FALSE(dies ist die Standardeinstellung). sonst wird es nicht funktionieren. Außerdem benötigen Sie das doppelte Escape `\`, oder Sie erhalten eine Fehlermeldung.
David C.
Sie würden es nicht mit fixed als TRUE verwenden, da wir hier reguläre Ausdrücke verwenden.
Hansi
11

Wir können so tun, als wären sie Dateinamen, und Erweiterungen entfernen :

tools::file_path_sans_ext(a)
# [1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155"
zx8754
quelle
7

Du könntest es tun:

sub("*\\.[0-9]", "", a)

oder

library(stringr)
str_sub(a, start=1, end=-3)
johannes
quelle
3
Alternativen: str_replace(a,"\\.[0-9]","")undstr_replace(a,"\\..*","")
Paolo
5

Wenn die Zeichenfolge eine feste Länge haben soll, kann substrfrom base Rverwendet werden. Aber wir können die Position des .mit bekommen regexprund das in verwendensubstr

substr(a, 1, regexpr("\\.", a)-1)
#[1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155"   
akrun
quelle