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?

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" 

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"

7

Du könntest es tun:

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

oder

library(stringr)
str_sub(a, start=1, end=-3)

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"   
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.