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.