2012-05-08 3 views
8

Есть ли у кого-нибудь трюк, чтобы удалить конечные пробелы для переменных с помощью gsub?удаление конечных пробелов с помощью gsub в R

Ниже приведен образец моих данных. Как вы можете видеть, у меня есть как конечные пробелы, так и пробелы, встроенные в переменную.

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

Я могу использовать следующую логику, чтобы удалить все пробелы, но я действительно хочу только перемещать пробелы в конце.

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

Любая помощь была бы принята с благодарностью.

+0

ответил Также здесь: http://stackoverflow.com/a/2261149/1172302 –

ответ

10

Вы можете использовать регулярное выражение:

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

$ стенд для конца текста последовательности, поэтому только конечные пробелы совпадают. perl=T позволяет использовать регулярные выражения для шаблона соответствия. Подробнее о регулярном выражении см. ?regex.

+0

большое спасибо – MikeTP

+4

@MikeTP: обратите внимание, что это будет работать только тогда, когда есть только один завершающий пробел. Если ваш вектор county имеет элемент с несколькими конечными пробелами, будет удалено только последнее. –

30

Прочитано ?regex, чтобы узнать, как работают регулярные выражения.

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

[:space:] является предопределенным классом символов, который соответствует пробелам в вашей местности. * говорит, чтобы повторить совпадение ноль или более раз, и $ говорит, чтобы соответствовать концу строки.

+0

большое спасибо – MikeTP

+2

@MikeTP Hadly красиво суммировал кучу общих строковых функций в своем пакете 'stringr'. Тот, который делает это, - 'str_trim()'. – Justin

8

Если вам не нужно использовать команду gsub - функция str_trim полезна для этого.

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

Обратите внимание, что 'str_trim' - хорошая оболочка для gsub. Я не понимаю, что вы подразумеваете под «Если вам не нужно использовать gsub». – Dason

+0

Это приведет к удалению любого количества пробелов в конце строки, а не только одного. –

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

Я пытаюсь понять это, но для меня есть только ведущее пространство, а не конечное пространство? – TobiO

Смежные вопросы