2012-05-16 23 views
32

tôi đang làm việc với những con số nhập NCBI tham khảo trình tự như biến a:Xóa một phần của chuỗi sau "."

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

Để có được thông tin từ các gói Biomart tôi cần phải loại bỏ các .1, .2 vv sau khi những con số nhập. Tôi thường làm điều này với mã này:

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

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

Nhưng như bạn có thể thấy, đây không phải là cách chính xác cho biến này. Bất cứ ai có thể giúp tôi với điều này?

Trả lời

44

Bạn chỉ cần phải thoát khỏi giai đoạn:

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

Làm rõ: Với các hàm trong gói cơ sở (tức là không có các gói khác như 'chuỗi r'), các tùy chọn được đăng như sau: b1 <- gsub (" \\ .. * "," ", a, fixed = FALSE) b2 <- sub (" \\ .. * "," ", a, fixed = FALSE) Trong một số trường hợp nhất định, bạn có thể cần thay đổi đối số' cố định'. Tuy nhiên, ở đây bạn * phải * đặt nó thành 'FALSE' (mặc định); nếu không nó sẽ không hoạt động. Hơn nữa, bạn cần thoát kép '\\', hoặc bạn gặp lỗi. –

+0

Bạn sẽ không sử dụng nó với cố định là TRUE vì chúng tôi đang sử dụng cụm từ thông dụng ở đây. – Hansi

3

Bạn có thể làm:

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

hoặc

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

Các giải pháp thay thế: 'str_replace (a," \\. [0-9] "," ")' và 'str_replace (a," \\ .. * "," ")' – Paolo

3

Chúng ta có thể giả vờ họ tên tập tin và loại bỏ mở rộng:

tools::file_path_sans_ext(a) 
# [1] "NM_020506" "NM_020519" "NM_001030297" "NM_010281" "NM_011419" "NM_053155" 
Các vấn đề liên quan