したがって、次のデータがあります。たとえば、「my_data」と呼ばれます。
Storm.Type
TYPHOON
SEVERE STORM
TROPICAL STORM
SNOWSTORM AND HIGH WINDS
my_data $ Storm.Typeの各要素が嵐であるかどうかを分類する必要がありますが、熱帯低気圧を嵐として含めたくないので(個別に分類します)、次のようにします。
Storm.Type Is.Storm
TYPHOON 0
SEVERE STORM 1
TROPICAL STORM 0
SNOWSTORM AND HIGH WINDS 1
私は次のコードを書きました:
my_data$Is.Storm <- my_data[grep("(?<!TROPICAL) (?i)STORM"), "Storm.Type"]
しかし、これは「SEVERE STORM」を嵐として返すだけです(ただし、SNOWSTORMとHIGH WINDSは除外されます)。ありがとうございました!
問題は" STORM"
、前にスペースがある文字列を探しているため、"SNOWSTORM"
修飾されないことです。
修正として、次のように、スペースをネガティブルックビハインドアサーションに移動することを検討してください。
ss <- c("TYPHOON","SEVERE STORM","TROPICAL STORM","SNOWSTORM AND HIGH WINDS",
"THUNDERSTORM")
grep("(?<!TROPICAL )(?i)STORM", ss, perl = TRUE)
# [1] 2 4 5
grepl("(?<!TROPICAL )(?i)STORM", ss, perl = TRUE)
# [1] FALSE TRUE FALSE TRUE TRUE
私はそれを知りませんでした、(?i)
そして(?-i)
あなたが正規表現で大文字小文字を無視するかどうかを設定しました。クールな発見。それを行う別の方法はignore.case
フラグです:
grepl("(?<!tropical )storm", ss, perl = TRUE, ignore.case = TRUE)
# [1] FALSE TRUE FALSE TRUE TRUE
次に、列を定義します。
my_data$Is.Storm <- grepl("(?<!tropical )storm", my_data$Storm.Type,
perl = TRUE, ignore.case = TRUE)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加