3

ベクトル内の文字列要素の部分文字列を空白に置き換えようとしています。以下は、検討中のベクトルです。

test <- c("PALMA DE MALLORCA", "THE RICH AND THE POOR", "A CAMEL IN THE DESERT", "SANTANDER SL", "LA")

lista <- c("EL", "LA", "ES", "DE", "Y", "DEL", "LOS", "S.L.", "S.A.", "S.C.", "LAS",
       "DEL", "THE", "OF", "AND", "BY", "S", "L", "A", "C", "SA", "SC", "SL")

次に、mgsub関数をそのまま適用すると、次の出力が得られます。

library(qdap)
mgsub(lista, "", test)
# [1] "PM MOR"   "RIH POOR" "M IN ERT" "NTER"     ""  

したがって、リストを次のように変更して再実行します。

lista <- paste("\\b", lista, "\\b", sep = "")
mgsub(lista, "", test)
# [1] "PALMA DE MALLORCA"     "THE RICH AND THE POOR" "A CAMEL IN THE DESERT"
# [4] "SANTANDER SL"          "LA"   

この関数で単語境界正規表現を機能させることができません。

4

1 に答える 1

2

multigsub {qdap}ドキュメントによると:

mgsub(pattern, replacement = NULL, text.var, leadspace = FALSE, trailspace = FALSE, fixed = TRUE, trim = TRUE, ...)
... 論理的。の場合、pattern はそのまま照合される文字列です。競合するすべての引数をオーバーライドします。
fixed
TRUE

検索語のベクトルが正規表現として解析されるようにするには、fixedパラメーターを「手動で」 に設定する必要がありますFALSE

もう 1 つの重要な注意事項: 後に設定された単語境界に.は、その後 (または行末) に単語文字が必要です。この場合、サブパターンを使用する方が安全(?!\w)です。R 正規表現でルックアラウンドを使用するには、Perl ライクな正規表現を使用する必要があります。したがって、これを使用することをお勧めします(単語以外の文字が正規表現の最後にのみ表示される場合):

lista <- paste("\\b", lista, "(?!\\w)", sep = "")

または (先頭にも単語以外の文字がある場合):

lista <- paste("(?<!\\w)", lista, "(?!\\w)", sep = "")

その後

mgsub(lista, "", test, fixed=FALSE, perl=TRUE)
于 2015-10-29T13:38:15.070 に答える