2013-07-15 17 views
18

Qual è il modo più elegante per estrarre l'ultima parola in una stringa di frase?Estrai l'ultima parola nella stringa in R

La frase non termina con un "." Le parole sono separate da spazi vuoti.

sentence <- "The quick brown fox" 
TheFunction(sentence) 

dovrebbe restituire: "volpe"

Non voglio usare un pacchetto se una soluzione semplice è possibile. Se esiste una soluzione semplice basata sul pacchetto, va bene anche questo.

+1

Dateci alcuni dettagli sulla struttura dei dati, altrimenti, siamo solo tutti pugnalati al buio mentre cercavamo di aiutarvi. – A5C1D2H2I1M1N2O1R2T1

+1

Che cosa hai provato? Immagino che tu possa semplicemente invertire la stringa e separarla con "" "". –

+1

Correlati: http://stackoverflow.com/questions/13093931/r-remove-last-word-from-string –

risposta

17
tail(strsplit('this is a sentence',split=" ")[[1]],1) 

In sostanza, come suggerito da @ Señor O.

+0

È difficile per me chiamare un metodo con '[[' elegante :) ma potrebbe essere il mio personale sentimento per le liste di R –

10
x <- 'The quick brown fox' 
sub('^.* ([[:alnum:]]+)$', '\\1', x) 

Ciò catturerà l'ultima stringa di numeri e caratteri prima della fine della stringa.

È anche possibile utilizzare i regexec e regmatches funzioni, ma trovo sub più pulito:

m <- regexec('^.* ([[:alnum:]]+)$', x) 
regmatches(x, m) 

Vedi ?regex e ?sub per maggiori informazioni.

+0

Direi che la soluzione Roland per questo specifico problema è molto più semplice, ma il tuo codice fornisce un buon modello per fare tutti i tipi di estrazioni mirate. –

+0

se stai cercando di rendere la sintassi ancora più corta, puoi omettere '^' ('sub' inizierà all'inizio da solo) e sostituirai' [[: alnum:]] 'con' \\ w' – eddi

+0

@ buon punto. Tuttavia, mi piace essere il più esplicito possibile con le espressioni regolari e generalizzare solo quando trovo i casi che mi mancano piuttosto che cercare di trovare casi in cui ho trovato una corrispondenza eccessiva. – Justin

5

Andando nella direzione pacchetto, questa è la risposta più semplice che posso pensare:

library(stringr) 

x <- 'The quick brown fox' 
str_extract(x, '\\w+$') 
#[1] "fox" 
27

Solo per completezza: La biblioteca contiene stringr una funzione esattamente per questo problema.

library(stringr) 

sentence <- "The quick brown fox" 
word(sentence,-1) 
[1] "fox" 
10

Un'altra opzione è confezionato stri_extract_last_words() dal stringi pacchetto

library(stringi) 

stri_extract_last_words("The quick brown fox") 
# [1] "fox" 

La funzione elimina anche qualsiasi punteggiatura che può essere alla fine della frase.

stri_extract_last_words("The quick brown fox? ...") 
# [1] "fox" 
Problemi correlati