Điều này có vẻ như một câu hỏi ngu ngốc như vậy, nhưng tôi không thể tìm thấy giải pháp. Tôi có một cột people$food
có các mục nhập như chocolate
hoặc apple-orange-strawberry
. Tôi muốn chia people$food
bởi -
và nhận mục nhập đầu tiên từ phần tách. Trong python, giải pháp sẽ là food.split('-')[0]
, nhưng tôi không thể tìm thấy một tương đương cho R.Mục nhập đầu tiên từ chuỗi tách
Trả lời
Nếu bạn cần giải nén đầu tiên (hoặc nth
) mục nhập từ mỗi phần tách, sử dụng:
word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word,"-"), `[`, 1)
#[1] "apple" "chocolate"
Hoặc nhanh hơn và explictly hơn:
vapply(strsplit(word,"-"), `[`, 1, FUN.VALUE=character(1))
#[1] "apple" "chocolate"
Cả hai bit của mã sẽ đối phó tốt với lựa chọn bất cứ giá trị trong danh sách phân chia, và sẽ đối phó với trường hợp nằm ngoài phạm vi:
vapply(strsplit(word,"-"), `[`, 2, FUN.VALUE=character(1))
#[1] "orange" NA
Ví dụ
word <- 'apple-orange-strawberry'
strsplit(word, "-")[[1]][1]
[1] "apple"
hoặc tương đương
unlist(strsplit(word, "-"))[1].
Về cơ bản ý tưởng là split
cho một danh sách là kết quả, mà các phần tử của nó phải được truy cập bằng cách cắt (trường hợp cũ) hoặc bằng cách không công bố (sau này).
Nếu bạn muốn áp dụng phương pháp này cho toàn bộ một cột:
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"
Tôi sẽ sử dụng sub()
để thay thế. Vì bạn muốn "từ" đầu tiên trước khi chia nhỏ, chúng tôi chỉ có thể xóa mọi thứ sau -
đầu tiên và đó là những gì chúng tôi còn lại.
sub("-.*", "", people$food)
Dưới đây là một ví dụ -
x <- c("apple", "banana-raspberry-cherry", "orange-berry", "tomato-apple")
sub("-.*", "", x)
# [1] "apple" "banana" "orange" "tomato"
Ngược lại, nếu bạn muốn sử dụng strsplit()
bạn có thể khỏa lấp lên các yếu tố đầu tiên với vapply()
vapply(strsplit(x, "-", fixed = TRUE), "[", "", 1)
# [1] "apple" "banana" "orange" "tomato"
Tôi khuyên bạn nên sử dụng head
thay vì [
trong R.
word <- c('apple-orange-strawberry','chocolate')
sapply(strsplit(word, "-"), head, 1)
# [1] "apple" "chocolate"
- 1. Tách chuỗi tại không gian đầu tiên
- 2. Tách một chuỗi trên không gian đầu tiên
- 3. Tách chuỗi tại dấu hai chấm đầu tiên
- 4. Cách tách chuỗi trước dấu phẩy đầu tiên?
- 5. tách ra ở không gian đầu tiên trong một chuỗi
- 6. Lấy x mục đầu tiên từ một danh sách
- 7. Tách ký tự đầu tiên của các từ
- 8. Nhận từ đầu tiên của chuỗi
- 9. Nhận 250 từ đầu tiên của chuỗi?
- 10. Xóa từ đầu tiên trong chuỗi Python?
- 11. Lấy từ đầu tiên trong một chuỗi từ & không gian - Từ đầu tiên của chuỗi con trước khoảng trắng
- 12. Thêm mục nhập vào danh sách và xóa mục nhập đầu tiên trong Python
- 13. Tách cam kết đầu tiên trong git
- 14. đăng nhập đầu tiên 10 trong git
- 15. tách chuỗi tại chỉ mục
- 16. java - sau khi tách một chuỗi, phần tử đầu tiên trong mảng là gì?
- 17. Lấy vật phẩm đầu tiên từ Split()
- 18. Windows: Tách đầu vào từ 2 Chuột
- 19. Di char đầu tiên và cuối cùng từ chuỗi
- 20. Remove ký tự đầu tiên từ chuỗi nếu 0
- 21. chỉ nhận được số đầu tiên từ chuỗi trong Python
- 22. Hiển thị từ đầu tiên trong chuỗi bằng Ruby
- 23. Xóa hình thức đầu tiên của từ khỏi chuỗi?
- 24. Xóa từ đầu tiên khỏi chuỗi trong Java
- 25. Lấy chữ cái đầu tiên của một chuỗi từ cột
- 26. Trả lại các mục đầu tiên x từ mảng
- 27. mục đầu tiên từ một bản đồ trên JavaScript ES2015
- 28. cách tách một chuỗi trên cá thể đầu tiên của dấu phân cách trong python
- 29. Làm cách nào để sử dụng VBScript để tách các ký tự đầu tiên của chuỗi?
- 30. Chuỗi phân tách Swift trong lần khớp đầu tiên của một ký tự
'strsplit' là vectơ, do đó, không cần phải 'sapply' nó trên mỗi mục riêng lẻ trong vector. Xem câu trả lời của tôi dưới đây. – thelatemail
Đúng, tôi không biết điều đó, cảm ơn! – gented