3 回答

TA貢獻1993條經驗 獲得超6個贊
一般來說,我們需要一個矢量化的解決方案,所以這里有一個更好的測試示例:
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
基礎R方法: gsub
gsub用另一個字符串替換string(fixed = TRUE)或正則表達式(fixed = FALSE,默認值)的所有實例。要刪除所有空格,請使用:
gsub(" ", "", x, fixed = TRUE)
## [1] "xy" "←→"
## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA
正如DWin所指出的那樣,在這種情況下fixed = TRUE不是必需的,但提供稍好的性能,因為匹配固定字符串比匹配正則表達式更快。
如果要刪除所有類型的空格,請使用:
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:]"是一個匹配所有空格字符的特定于R的正則表達式組。 \s是一個獨立于語言的正則表達式,它做同樣的事情。
該stringr方法:str_replace_all和str_trim
stringr在基本R函數周圍提供了更多人類可讀的包裝器(盡管截至2014年12月,開發版本具有構建在其上的分支stringi,如下所述)。上述命令的等價物,使用[ str_replace_all][3],是:
library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")
stringr還有一個str_trim只刪除前導和尾隨空格的函數。
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方法:stri_replace_all_charclass和stri_trim
stringi基于獨立于平臺的ICU庫構建,并具有廣泛的字符串操作功能。以上的等價物是:
library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")
這里"\\p{WHITE_SPACE}"是對于該組被認為是空白,相當于Unicode碼位的替換的語法"[[:space:]]","\\s"和space()。對于更復雜的正則表達式替換,也有stri_replace_all_regex。
stringi還有修剪功能。
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
- 3 回答
- 0 關注
- 3101 瀏覽
添加回答
舉報