2012-05-08 21 views
8

Có ai có mẹo để xóa dấu cách trên các biến bằng gsub không?xoá dấu cách bằng dấu gsub trong R

Dưới đây là mẫu dữ liệu của tôi. Như bạn có thể thấy, tôi có cả dấu cách và dấu cách được nhúng trong biến.

county <- c("mississippi ","mississippi canyon","missoula ", 
      "mitchell ","mobile ", "mobile bay") 

Tôi có thể sử dụng logic sau để xóa tất cả không gian, nhưng điều tôi thực sự muốn chỉ là di chuyển dấu cách ở cuối.

county2 <- gsub(" ","",county) 

Mọi hỗ trợ sẽ được đánh giá cao.

+0

Cũng đã trả lời ở đây: http://stackoverflow.com/a/2261149/1172302 –

Trả lời

10

Bạn có thể sử dụng một biểu thức chính quy:

county <- c("mississippi ","mississippi canyon","missoula ", 
     "mitchell ","mobile ", "mobile bay") 
county2 <- gsub(" $","", county, perl=T) 

$ đứng cho đến cuối chuỗi văn bản của bạn, do đó không gian chỉ trailing được khớp. perl=T cho phép biểu thức chính quy cho mẫu đối sánh. Để biết thêm thông tin về biểu thức chính quy, hãy xem ?regex.

+0

thank you very much – MikeTP

+4

@MikeTP: lưu ý rằng điều này sẽ chỉ làm việc nếu chỉ có một không gian dấu duy nhất. Nếu vectơ 'hạt' của bạn có phần tử có nhiều dấu cách, thì chỉ số cuối cùng sẽ bị xóa. –

30

Đọc ?regex để biết ý tưởng về cách biểu thức chính quy hoạt động.

gsub("[[:space:]]*$","",county) 

[:space:] là lớp ký tự được xác định trước khớp với ký tự không gian trong ngôn ngữ của bạn. * nói để lặp lại kết quả bằng không hoặc nhiều lần và $ nói để khớp với phần cuối của chuỗi.

+0

cảm ơn bạn rất nhiều – MikeTP

+2

@MikeTP Hadly độc đáo tóm tắt một loạt các hàm chuỗi phổ biến trong gói 'stringr' của mình. Cái thực hiện điều này là 'str_trim()'. – Justin

8

Nếu bạn không cần sử dụng lệnh gsub - hàm str_trim hữu ích cho việc này.

library(stringr) 
    county <- c("mississippi ","mississippi canyon","missoula ", 
     "mitchell ","mobile ", "mobile bay") 
    str_trim(county) 
+1

Lưu ý rằng 'str_trim' là một trình bao bọc đẹp cho gsub. Tôi không rõ ràng về những gì bạn có ý nghĩa bởi "Nếu bạn không cần phải sử dụng gsub". – Dason

+0

Thao tác này sẽ xóa mọi khoảng trắng ở cuối chuỗi chứ không phải chỉ một dấu cách. –

0
Above solution can not be generalized. Here is an example: 


    a<-" keep business moving" 
    str_trim(a) #Does remove trailing space in a single line string 

However str_trim() from 'stringr' package works only for a vector of words and a single line but does not work for multiple lines based on my testing as consistent with source code reference. 

    gsub("[[:space:]]*$","",a) #Does not remove trailing space in my example 
    gsub(" $","", a, perl=T) #Does not remove trailing space in my example 

Below code works for both term vectors and or multi-line character vectors which was provided by the reference[1] below. 

    gsub("^ *|(?<=) | *$", "", a, perl=T) 


#Reference:: 
+0

Tôi đang cố gắng để hiểu điều này, nhưng đối với tôi chỉ có một không gian hàng đầu, không phải là một dấu cách? – TobiO

Các vấn đề liên quan