2012-05-16 13 views
32

Pracuję z numerami dostępu NCBI sekwencji odniesienia jak zmiennej a:Usuń część ciągu po "."

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

Aby uzyskać informacje z pakietu biomart muszę usunąć .1, .2 itp po numerach akcesyjnych. Zwykle robię to z tym kodem:

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

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

Ale jak widzisz, nie jest to poprawna metoda dla tej zmiennej. Czy ktoś może mi w tym pomóc?

Odpowiedz

44

Trzeba tylko uciec okres:

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" 
+0

Wyjaśnienie: z funkcjami w pakiet podstawowy (np bez innych pakietów, takich jak 'string r'), opcje są następujące: b1 <- gsub (" \\ .. * "," ", a, naprawiono = FAŁSZ) b2 <- pod (" \\ .. * "," ", a, naprawiono = FAŁSZ) W niektórych przypadkach może być konieczna zmiana argumentu' fixed'. Jednak tutaj * musisz * ustawić go na "FALSE" (co jest domyślne); inaczej nie zadziała. Co więcej, potrzebujesz podwójnego wyjścia '\\' lub pojawi się błąd. –

+0

Nie używałbyś tego z ustalonym jako PRAWDA, ponieważ używamy tu wyrażenia regularnego. – Hansi

3

Można zrobić:

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

lub

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

Alternatywy: 'str_replace (a," \\. [0-9] "," ")' i 'str_replace (a," \\ .. * "," ")' – Paolo

3

Możemy udawać, że są nazwy plików i usuwania rozszerzeń:

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