Sembra una domanda così sciocca, ma non riesco a trovare una soluzione. Ho una colonna people$food
con voci come chocolate
o apple-orange-strawberry
. Voglio dividere people$food
per -
e ottenere la prima voce dalla divisione. In Python, la soluzione sarebbe food.split('-')[0]
, ma non riesco a trovare un equivalente per R.Prima voce da Split Split
risposta
Se è necessario estrarre la prima (oppure nth
) da ogni divisione, utilizzare:
word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word,"-"), `[`, 1)
#[1] "apple" "chocolate"
o più veloce e più esplicitamente:
vapply(strsplit(word,"-"), `[`, 1, FUN.VALUE=character(1))
#[1] "apple" "chocolate"
Entrambi i bit di codice sarà gestire bene con la selezione a seconda di quale valore nell'elenco scissione, e si occuperanno di casi che sono fuori della gamma:
vapply(strsplit(word,"-"), `[`, 2, FUN.VALUE=character(1))
#[1] "orange" NA
Per esempio
word <- 'apple-orange-strawberry'
strsplit(word, "-")[[1]][1]
[1] "apple"
o, equivalentemente
unlist(strsplit(word, "-"))[1].
In sostanza l'idea è che dà split
una lista come risultato, i cui elementi devono essere accessibili sia affettando (il primo caso) o non elencando (il secondo).
Se si desidera applicare il metodo per un'intera colonna:
first.word <- function(my.string){
unlist(strsplit(my.string, "-"))[1]
}
words <- c('apple-orange-strawberry', 'orange-juice')
R: sapply(words, first.word)
apple-orange-strawberry orange-juice
"apple" "orange"
userei sub()
invece. Dato che vuoi la prima "parola" prima della divisione, possiamo semplicemente rimuovere tutto dopo il primo -
e questo è quello che ci rimane.
sub("-.*", "", people$food)
Ecco un esempio -
x <- c("apple", "banana-raspberry-cherry", "orange-berry", "tomato-apple")
sub("-.*", "", x)
# [1] "apple" "banana" "orange" "tomato"
In caso contrario, se si desidera utilizzare strsplit()
si può radunare i primi elementi con vapply()
vapply(strsplit(x, "-", fixed = TRUE), "[", "", 1)
# [1] "apple" "banana" "orange" "tomato"
io suggerirei di usare head
piuttosto che [
in R.
word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word, "-"), head, 1)
# [1] "apple" "chocolate"
- 1. Comportamento del metodo split split
- 2. Split da più personaggi
- 3. Split una stringa che restituisce da una funzione split
- 4. Python Regex Split Mantiene Split caratteri pattern
- 5. parola Split da lettera maiuscola
- 6. Split java.util.stream.Stream
- 7. Split() deprecato
- 8. split non funziona correttamente
- 9. Come gestire split-brain?
- 10. split() ma mantenere delimitatore
- 11. Split-Screen in LibGDX
- 12. Come usare split?
- 13. boost split split per eliminare gli spazi nelle parole
- 14. Tastiera split per iPad
- 15. Split parametri separati da virgola in LaTeX
- 16. estrarre gli ultimi due campi da split
- 17. Split xts oggetto per eventi
- 18. Perché '////'.split('/') produce []?
- 19. Split un ikiwiki
- 20. split string with regex
- 21. .Split ("//") sta prendendo anche "/"
- 22. Split string in Lua?
- 23. Split camelCase Nome colonna
- 24. split string all'indice
- 25. Split view in portrait!
- 26. Split NSString nell'array
- 27. split ("\\") ed errore
- 28. Split GIF in frame
- 29. Split stringa di caratteri
- 30. Funzione split string
'strsplit' è vettorizzato, quindi non c'è bisogno di "tranquillizzarlo" su ogni singolo oggetto nel vettore. Vedi la mia risposta qui sotto. – thelatemail
Vero, non ne ero a conoscenza, grazie! – gented