Nếu có các chuỗi rắc rối hơn, trong đó thời gian có thể xuất hiện bên ngoài của một phần số của chuỗi, bạn có thể muốn sử dụng một cái gì đó như thế này.
library(gsubfn)
## A possibly more realistic character vector
x <- c("2.11abc.def","a.b-15.1cde",".562342rfg", "abcdef")
getNumberPart <- function(x) {
pat <- "(-?(\\d*\\.*\\d+|\\d+\\.))"
strapply(x, pattern=pat, FUN=as.numeric, simplify=TRUE, empty=NA)
}
getNumberPart(x)
# [1] 2.110000 -15.100000 0.562342 NA
Do lưu ý rằng nếu một chuỗi chứa nhiều hơn một số, strapply()
sẽ trích xuất tất cả trong số họ, và sẽ trả lại kết quả tổng thể như một danh sách (chứ không phải là một vector đơn giản) với một yếu tố danh sách mỗi chuỗi đầu vào.
Nguồn
2015-03-02 22:05:04
Cảm ơn bạn rất nhiều! –
Mặc dù hãy cẩn thận nếu một khoảng thời gian có thể xảy ra ở bất kỳ nơi nào ngoài phần số của chuỗi (như trong "" 2.11abc.def "' hoặc '" a.b215 "', ví dụ) –
@ JoshO'Brien Cảm ơn bạn đã chỉ ra điều đó. Tôi tìm thấy kịch bản đầu tiên ("2.11abc.def") đã tồn tại trong dữ liệu của tôi. Phải tìm ra cách khác. :( –