2012-10-26 15 views
9

Próbuję coś zrobić, ale nie pamiętam/znajduję odpowiedzi. Mam spis nazw miast z Biura Spisu Ludności, a na końcu wpisuje się typ miasta, który psuje mój numer match().R usuń ostatnie słowo ze stringa

Chciałbym, aby ten:

Middletown Township 
Sunny Valley Borough 
Hillside Village 

do tego:

Middletown 
Sunny Valley 
Hillside 

jakieś sugestie? Idealnie Chciałbym również wiedzieć, czy istnieje lastIndexOf() funkcja w R.

Oto dput:

> dput(df1) 
structure(list(id = c(1, 2, 3), city = structure(c(2L, 3L, 1L 
), .Label = c("Hillside Village", "Middletown Township", "Sunny Valley Borough" 
), class = "factor")), .Names = c("id", "city"), row.names = c(NA, 
-3L), class = "data.frame") 

Odpowiedz

15

to będzie działać:

gsub("\\s*\\w*$", "", df1$city) 
[1] "Middletown" "Sunny Valley" "Hillside" 

Usuwa dowolny fragment składający się z jednego lub więcej znaków przestrzeni, po których następuje dowolna liczba znaków "słowo" (spacje, liczby lub podkreślenia), a następnie koniec łańcucha.

+0

Co jeśli chcę uzyskać "Township, Borough, Village", czyli ostatnie słowo. I zapisać jako nową zmienną? – jacob

+1

Możesz użyć pakietu stringi. Nazwa funkcji to stri_extract_last_words. Możesz udostępnić tej funkcji listę zdań, która zwróci listę ostatnich słów w tych zdaniach. Jednak nie usunie ostatniego słowa z zdania, dla usunięcia celu potrzebujemy polecenia gsub podanego przez Josh'a – rkmalaiya

12

Oto regexp, że robi to, co trzeba:

sub(df1$city, pattern = " [[:alpha:]]*$", replacement = "") 

[1] "Middletown" "Sunny Valley" "Stok"

To zastąpienie podciąg, który rozpoczyna się w przestrzeni , a następnie zawiera tylko litery do końca ciągu, z pustym ciągiem znaków.

+0

+1 to wyrażenie jest lepszym rozwiązaniem, ponieważ pozostawia pojedyncze słowo w stanie nienaruszonym. – topchef