3

複数の文字ベクトルから複数のパターンを削除したいと考えています。現在、私は行っています:

a.vector <- gsub("@\\w+", "", a.vector)
a.vector <- gsub("http\\w+", "", a.vector)
a.vector <- gsub("[[:punct:]], "", a.vector)

などなど

これは痛いです。この質問と回答を見ていました: R: gsub, pattern = vector and replacement = vectorしかし、問題は解決していません。

mapplyもも機能していませんmgsub。これらのベクトルを作成しました

remove <- c("@\\w+", "http\\w+", "[[:punct:]]")
substitute <- c("")

どちらmapply(gsub, remove, substitute, a.vector)でもないmgsub(remove, substitute, a.vector) worked.

a.vector次のようになります。

[4951] "@karakamen: Suicide amongst successful men is becoming rampant. Kudos for staing the conversation. #mental"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
[4952] "@stiphan: you are phenomenal.. #mental #Writing. httptxjwufmfg"   

私が欲しい:

[4951] "Suicide amongst successful men is becoming rampant Kudos for staing the conversation #mental"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
[4952] "you are phenomenal #mental #Writing"   `
4

4 に答える 4

5

を使用してサブパターンを組み合わせてみてください|。例えば

>s<-"@karakamen: Suicide amongst successful men is becoming rampant. Kudos for staing the conversation. #mental"
> gsub("@\\w+|http\\w+|[[:punct:]]", "", s)
[1] " Suicide amongst successful men is becoming rampant Kudos for staing the conversation #mental"

しかし、多数のパターンがある場合、または 1 つのパターンを適用した結果が他のパターンと一致する場合、これは問題になる可能性があります。

removeあなたが提案したようにベクトルを作成し、それをループに適用することを検討してください

> s1 <- s
> remove<-c("@\\w+","http\\w+","[[:punct:]]")
> for (p in remove) s1 <- gsub(p, "", s1)
> s1
[1] " Suicide amongst successful men is becoming rampant Kudos for staing the conversation #mental"

もちろん、このアプローチを拡張して、テーブルまたはベクター全体に適用する必要があります。しかし、最終的な文字列を返す関数にそれを入れると、それをapplyバリアントの1つに渡すことができるはずです

于 2015-03-13T16:35:10.297 に答える
1

探している複数のパターンが固定されていて、ケースごとに変化しない場合は、すべてのパターンを 1 つの uber 正規表現パターンに結合する連結正規表現を作成することを検討できます。

提供した例については、次を試すことができます。

removePat <- "(@\\w+)|(http\\w+)|([[:punct:]])"

a.vector <- gsub(removePat, "", a.vector)
于 2015-10-24T00:15:10.537 に答える