2012-10-26 18 views
9

Sto cercando di fare qualcosa ma non ricordo/trovare la risposta. Ho una lista di nomi di città del Census Bureau e hanno messo il tipo della città alla fine che sta incasinando il mio match().R rimuovere l'ultima parola dalla stringa

mi piacerebbe fare questo:

Middletown Township 
Sunny Valley Borough 
Hillside Village 

in questo:

Middletown 
Sunny Valley 
Hillside 

Qualche suggerimento? Idealmente mi piacerebbe anche sapere se c'è una funzione lastIndexOf() in R.

Ecco il 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") 

risposta

15

questo funzionerà:

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

Rimuove qualsiasi sottostringa costituita da uno o più caratteri di spazio, seguiti da un numero qualsiasi di caratteri "word" (spazi, numeri o caratteri di sottolineatura), seguiti dalla fine della stringa.

+0

Cosa succede se voglio ottenere "Township, Borough, Village", vale a dire l'ultima parola. E salvarlo come una nuova variabile? – jacob

+1

È possibile utilizzare il pacchetto stringi. Il nome della funzione è stri_extract_last_words. È possibile fornire a questa funzione un elenco di frasi e restituirà l'elenco delle ultime parole in quelle frasi. Tuttavia, non rimuoverà l'ultima parola dalla frase, per rimuovere lo scopo, abbiamo bisogno del comando gsub fornito da Josh – rkmalaiya

12

Ecco un'espressione regolare che fa quello che vi serve:

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

[1] "Middletown" "Sunny Valley" "Hillside"

Ecco la sostituzione di una stringa che inizia con uno spazio , quindi contiene solo lettere fino alla fine della stringa, con una stringa vuota.

+0

+1 questa regex è la risposta migliore in quanto lascia intatta la singola parola. – topchef

Problemi correlati