与えられた入力ベクトル (iv)
iv <- c(.10,.15,"hello","."," . ",". ")
私は使用しています:
out <- sub(regexp,NA,iv)
次のような出力ベクトルが必要です。
.10,.15,"hello",NA,NA,NA
しかし、必要なものを取得するために正規表現を作成する方法がわかりません。前もって感謝します。
あなたが探しているのnegative lookahead
は正規表現です。.
a が続かないことを確認しnumber (0-9)
、それらを に置き換えますNA
。このロジックが必要な場合は、次のように 1 行で実装できます。
gsub("\\.(?![0-9])", NA, iv, perl=T)
# [1] "0.1" "0.15" "hello" NA NA NA
ロジック: 数字が続かないドットを検索し、それらを に置き換えますNA
。
値を置き換えたい場合はNA
、何らかの形式の代入演算子を使用する必要があります。
簡単なアプローチ:
iv[gsub(" ", "", iv)=="."] <- NA
簡単な説明:
置換する文字列がすべて同じ (つまり"."
) の場合、単純に を呼び出すことができます
iv[ iv=="."] <- NA
。
ただし、余分なスペースをすべてキャッチするには、無数の「.」を検索できます。などを確実に除外する組み合わせ.10
、.15
または代わりにすべてのスペースを削除すると、より単純な状況で を使用できます==
。
ちなみに、Rで正規表現でピリオドを検索したい場合は、正規表現のピリオドを\.
エスケープしてから、エスケープのエスケープをエスケープする必要がありますR
。\\.
編集:上記の行は、からスペースを永久に削除しないことに注意してくださいiv
。見てみましょうgsub(" ", "", iv)=="."
これは T/F のベクトルを返します。これは、フィルター処理に使用されていますiv
。NA
値以外はiv
変更されません。
編集 #2: 変更を別のベクトルに保存する場合は、次を使用できます。
out <- iv
out[gsub(" ", "", iv)=="."] <- NA
gsub('^\\s*[.]\\s*$', 'NA',c(.10,.15,"hello","."," . ",". "))
[1] "0.1" "0.15" "hello" "NA" "NA" "NA"
EDIT置換' NA
'をNA
gsub('^\\s*[.]\\s*$', NA,c(.10,.15,"hello","."," . ",". "))
[1] "0.1" "0.15" "hello" NA NA NA
を使用して編集stringr
library(stringr)
x <- c(.10,.15,"hello","."," . ",". ")
x[str_trim(x) == '.'] <- NA
x
[1] "0.1" "0.15" "hello" NA NA NA
正規表現:
"^ *\. *$"