To wydaje się takie głupie pytanie, ale nie mogę znaleźć rozwiązania. Mam kolumnę people$food
, która ma wpisy takie jak chocolate
lub apple-orange-strawberry
. Chcę podzielić people$food
przez -
i uzyskać pierwszy wpis z podziału. W Pythonie, rozwiązaniem byłoby food.split('-')[0]
, ale nie mogę znaleźć odpowiednika dla R.Pierwszy wpis ze Splitu ze stringami
Odpowiedz
Jeśli trzeba wyodrębnić pierwszy (lub nth
) wpis z każdego podziału, użyj:
word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word,"-"), `[`, 1)
#[1] "apple" "chocolate"
lub szybszy i bardziej explictly:
vapply(strsplit(word,"-"), `[`, 1, FUN.VALUE=character(1))
#[1] "apple" "chocolate"
Oba fragmenty kodu będzie dobrze poradzić sobie z wyborem tych dwóch wartości na liście podziału i będzie zajmować się sprawami, które są poza zakresem:
vapply(strsplit(word,"-"), `[`, 2, FUN.VALUE=character(1))
#[1] "orange" NA
Na przykład
word <- 'apple-orange-strawberry'
strsplit(word, "-")[[1]][1]
[1] "apple"
lub równoważnie
unlist(strsplit(word, "-"))[1].
Zasadniczo chodzi o to, że daje split
w rezultacie lista, której elementy muszą być dostępne albo przez cięcie (pierwszy przypadek), albo przez niepubliczne (drugie).
Jeśli chcesz zastosować metodę do całej kolumny:
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"
użyłbym sub()
zamiast. Ponieważ chcesz mieć pierwsze "słowo" przed podziałem, możemy po prostu usunąć wszystko po pierwszym -
i to jest to, co nam zostało.
sub("-.*", "", people$food)
Oto przykład -
x <- c("apple", "banana-raspberry-cherry", "orange-berry", "tomato-apple")
sub("-.*", "", x)
# [1] "apple" "banana" "orange" "tomato"
W przeciwnym razie, jeśli chcesz używać strsplit()
można zaokrąglić w górę pierwsze elementy z vapply()
vapply(strsplit(x, "-", fixed = TRUE), "[", "", 1)
# [1] "apple" "banana" "orange" "tomato"
Sugerowałbym użyciu head
zamiast [
w R.
word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word, "-"), head, 1)
# [1] "apple" "chocolate"
- 1. Usuń białe spacje ze stringami ze Scala
- 2. Wywoływanie metod php ze stringami
- 3. Hasełka ze stringami za pomocą JavaScriptu
- 4. Jak korzystać z istream ze stringami
- 5. Podział w R przy użyciu warunku LUB ze stringami
- 6. Splitu Caps w JavaScript
- 7. Łączenie ze źródłami ze skaladoc?
- 8. Skrypt powłoki - usuń pierwszy i ostatni cudzysłów (") ze zmiennej
- 9. Rozmowa ze skanerem ze skryptu PHP
- 10. Problem ze zrozumieniem canvas fillText ze znakami Unicode
- 11. Autouzupełnianie mapy google domyślnie wybierz pierwszy wpis na liście
- 12. Jak odjąć pierwszy wpis z ostatniego wpisu w zgrupowanych danych
- 13. Jak zrobić Wybrany element nie automatycznie wybiera pierwszy wpis
- 14. Pobieranie zdjęć ze złomowaniem
- 15. Jednoczesne Mapa ze stałym rozmiarze
- 16. Obsługa argumentów wiersza poleceń Perl ze spacjami ze skryptu bash?
- 17. Jak zbudować Spark ze źródeł ze strony Download Spark?
- 18. Python3: warunkowa ekstrakcja kluczy ze słownika ze zrozumieniem
- 19. Wiele domen ze sprężynowym mvc
- 20. Zaktualizuj etykietę Tkintera ze zmiennej
- 21. Sortowanie drzewa ze zmaterializowaną ścieżką?
- 22. Usuwanie wielu klawiszy ze słownika bezpiecznie
- 23. Mapowanie Enum ze stringa
- 24. Kopiuj konstruktora ze wskaźnikami
- 25. Tworzenie wideo ze zdjęć
- 26. + = operator ze Zdarzeniami
- 27. Redirect_to ze ścieżką ciągu
- 28. ScheduledEexecutorService ze zmiennym opóźnieniem
- 29. Wycinanie numpy ze zmiennej
- 30. Szablon ze specjalizacji szablonów
'strsplit' jest vectorised, więc nie ma potrzeby "aprobować" go na każdy element w wektorze. Zobacz moją odpowiedź poniżej. – thelatemail
To prawda, nie wiedziałem o tym, dzięki! – gented