Vì vậy, " xx yy 11 22 33 "
sẽ trở thành "xxyy112233"
. Làm thế nào tôi có thể đạt được điều này?
Vì vậy, " xx yy 11 22 33 "
sẽ trở thành "xxyy112233"
. Làm thế nào tôi có thể đạt được điều này?
Câu trả lời:
Nói chung, chúng tôi muốn một giải pháp được véc tơ hóa, vì vậy đây là một ví dụ thử nghiệm tốt hơn:
whitespace <- " \t\n\r\v\f" # space, tab, newline,
# carriage return, vertical tab, form feed
x <- c(
" x y ", # spaces before, after and in between
" \u2190 \u2192 ", # contains unicode chars
paste0( # varied whitespace
whitespace,
"x",
whitespace,
"y",
whitespace,
collapse = ""
),
NA # missing
)
## [1] " x y "
## [2] " ← → "
## [3] " \t\n\r\v\fx \t\n\r\v\fy \t\n\r\v\f"
## [4] NA
gsub
gsub
thay thế tất cả các phiên bản của một chuỗi ( fixed = TRUE
) hoặc biểu thức chính quy ( fixed = FALSE
, mặc định) bằng một chuỗi khác. Để xóa tất cả các khoảng trắng, sử dụng:
gsub(" ", "", x, fixed = TRUE)
## [1] "xy" "←→"
## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA
Như DWin đã lưu ý, trong trường hợp fixed = TRUE
này là không cần thiết nhưng cung cấp hiệu suất tốt hơn một chút vì khớp chuỗi cố định nhanh hơn so với khớp biểu thức thông thường.
Nếu bạn muốn xóa tất cả các loại khoảng trắng, hãy sử dụng:
gsub("[[:space:]]", "", x) # note the double square brackets
## [1] "xy" "←→" "xy" NA
gsub("\\s", "", x) # same; note the double backslash
library(regex)
gsub(space(), "", x) # same
"[:space:]"
là một nhóm biểu thức chính quy dành riêng cho R khớp với tất cả các ký tự khoảng trắng. \s
là một biểu thức chính quy độc lập với ngôn ngữ cũng làm điều tương tự.
stringr
tiếp cận: str_replace_all
vàstr_trim
stringr
cung cấp nhiều trình bao bọc dễ đọc hơn cho con người xung quanh các hàm R cơ sở (mặc dù kể từ tháng 12 năm 2014, phiên bản phát triển có một nhánh được xây dựng trên đầu trang stringi
, được đề cập bên dưới). Tương đương của các lệnh trên, sử dụng [ str_replace_all][3]
, là:
library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")
stringr
cũng có một str_trim
chức năng chỉ loại bỏ khoảng trắng hàng đầu và dấu.
str_trim(x)
## [1] "x y" "← →" "x \t\n\r\v\fy" NA
str_trim(x, "left")
## [1] "x y " "← → "
## [3] "x \t\n\r\v\fy \t\n\r\v\f" NA
str_trim(x, "right")
## [1] " x y" " ← →"
## [3] " \t\n\r\v\fx \t\n\r\v\fy" NA
stringi
tiếp cận: stri_replace_all_charclass
vàstri_trim
stringi
được xây dựng dựa trên thư viện ICU độc lập với nền tảng và có một bộ các hàm thao tác chuỗi mở rộng. Các khoản tương đương của các bên trên là:
library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")
Dưới đây "\\p{WHITE_SPACE}"
là một cú pháp thay thế cho tập hợp các điểm mã Unicode coi là khoảng trắng, tương đương với "[[:space:]]"
, "\\s"
và space()
. Đối với thay thế biểu thức chính quy phức tạp hơn, cũng có stri_replace_all_regex
.
stringi
cũng có chức năng cắt .
stri_trim(x)
stri_trim_both(x) # same
stri_trim(x, "left")
stri_trim_left(x) # same
stri_trim(x, "right")
stri_trim_right(x) # same
"[[:space:]]"
và "\\s"
?
Tôi mới tìm hiểu về gói "stringr" để xóa khoảng trắng từ đầu và cuối chuỗi bằng str_trim (, side = "cả hai") nhưng nó cũng có chức năng thay thế sao cho:
a <- " xx yy 11 22 33 "
str_replace_all(string=a, pattern=" ", repl="")
[1] "xxyy112233"
Xin lưu ý rằng các linh hồn được viết ở trên chỉ loại bỏ không gian. Nếu bạn cũng muốn xóa tab hoặc sử dụng dòng mới stri_replace_all_charclass
khỏi stringi
gói.
library(stringi)
stri_replace_all_charclass(" ala \t ma \n kota ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"
stringi
Gói trên CRAN bây giờ, hãy tận hưởng! :)
stringi
một vài tháng nay và thấy / học được nó mạnh mẽ và hiệu quả như thế nào, nó đã trở thành gói đi kèm của tôi cho các hoạt động chuỗi. Các bạn đã làm một công việc tuyệt vời với nó.
Sử dụng [[:blank:]]
để khớp với bất kỳ loại ký tự trắng ngang nào.
gsub("[[:blank:]]", "", " xx yy 11 22 33 ")
# [1] "xxyy112233"
Các chức năng str_squish()
từ gói stringr
của tidyverse làm phép thuật!
library(dplyr)
library(stringr)
df <- data.frame(a = c(" aZe aze s", "wxc s aze "),
b = c(" 12 12 ", "34e e4 "),
stringsAsFactors = FALSE)
df <- df %>%
rowwise() %>%
mutate_all(funs(str_squish(.))) %>%
ungroup()
df
# A tibble: 2 x 2
a b
<chr> <chr>
1 aZe aze s 12 12
2 wxc s aze 34e e4
str_squish
không loại bỏ tất cả các không gian. Nó chỉ cắt và thay thế nhiều không gian cho một.
Bằng cách này, bạn có thể xóa tất cả khoảng trắng khỏi tất cả các biến ký tự trong khung dữ liệu của mình. Nếu bạn chỉ muốn chọn một số biến, hãy sử dụng mutate
hoặc mutate_at
.
library(dplyr)
library(stringr)
remove_all_ws<- function(string){
return(gsub(" ", "", str_squish(string)))
}
df<-df %>% mutate_if(is.character, remove_all_ws)
Từ thư viện Stringr bạn có thể thử điều này:
Xóa điền
thư viện (chuỗi)
2. 1.
| |
V V
str_replace_all(str_trim(" xx yy 11 22 33 "), " ", "")