2014-06-09 139 views
5

我正在研究R中的Twitter數據集,我發現很難從推文中刪除用戶名。R中的模式替換

這是我的數據集的鳴叫列鳴叫的例子:

[1] "@danimottale: 2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said."   
[2] "@FreeMktMonkey @drleegross Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks" 

我想刪除/替換開始以「@」所有的話得到這個輸出:

[1] "2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said."   
[2] "Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks" 

這個gsub函數適用於刪除「@」符號。

gsub("@", "", tweetdata$tweets) 

我想說的是,刪除文字符號後面的字符,直到遇到空格或標點符號。

我開始嘗試只是處理空間,但無濟於事:

gsub("@.*[:space:]$", "", tweetdata$tweets) 

這消除了第二鳴叫完全

gsub("@.*[:blank:]$", "", tweetdata$tweets) 

這不會改變輸出。

我將不勝感激您的幫助。

回答

9

您可以使用以下方法。 \S+匹配任何非空白字符(1或更多次),然後匹配單個空格字符。

gsub('@\\S+\\s', '', noRT$text) 

Working Demo

編輯:一個否定的比賽將正常工作還(僅使用空格字符

gsub('@[^ ]+ ', '', noRT$text) 
+1

非常感謝 - 非常有幫助,太糟糕我不能投票,因爲我是新的。 – user3722736

+1

@ user3722736您可以查看該解決方案是否符合您的需求,只需點擊向上計數下方的左側複選標記即可。 –

+0

使用'sub'而不是'gsub',因爲只有一個替代。 –

1

這裏的正則表達式的方法是簡單,直接的。我添加了第二個選項,允許您使用qdap的genX函數在任意兩個邊界之間刪除文本。這允許您提供左右邊界。

library(qdap) 
genX(x, "@", "\\s") 

## [1] "2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said." 
## [2] "Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks"  
+1

謝謝,很高興看到另一種解決方案。我希望我可以投你的答案,但我還沒有聲望。 – user3722736