1. ホーム
  2. r

[解決済み] 文字列からすべての空白を削除するには?

2022-04-20 09:47:12

質問

だから " xx yy 11 22 33 " は次のようになります。 "xxyy112233" . どうすれば実現できるのでしょうか?

どのように解決するのですか?

一般的には、ベクトル化された解が欲しいので、より良いテスト例を紹介します。

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 は、文字列 ( 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_allstr_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_charclassstri_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