R在同一行中多次匹配表达式

时间:2015-11-07 16:45:33

标签: regex r twitter

我正在使用R中的一组推文(非常原创,我知道),并希望在每个@符号之后和每个#之后提取文本并将它们放入单独的变量中。例如:

这是使用#twitter的测试推文。 @johnsmith @joesmith。

理想情况下,我希望在具有twitter johnsmith joesmith等的数据框架中创建新变量。

目前我正在使用 data $ at< - str_match(data $ tweet_text,“\ s @ \ w +”) data $ hash< - str_match(data $ tweet_text,“\ s#\ w +”)

这显然让我第一次出现在一个新变量中。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

strsplitgrep将有效:

x <-strsplit("This is a test tweet using #twitter. @johnsmith @joesmith."," ")
grep("#|@",unlist(x), value=TRUE)
#[1] "#twitter."  "@johnsmith" "@joesmith."

如果你只想保留单词,不要#,@或。:

out <-grep("#|@",unlist(x), value=TRUE)
gsub("#|@|\\.","",out)
[1] "twitter"   "johnsmith" "joesmith" 

更新将结果放入list

my_list <-NULL

x <-strsplit("This is a test tweet using #twitter. @johnsmith @joesmith."," ")
my_list$hash <-c(my_list$hash,gsub("#|@|\\.","",grep("#",unlist(x), value=TRUE)))
my_list$at <-c(my_list$at,gsub("#|@|\\.","",grep("@",unlist(x), value=TRUE)))

x <-strsplit("2nd tweet using #second. @jillsmith @joansmith."," ")
my_list$hash <-c(my_list$hash,gsub("#|@|\\.","",grep("#",unlist(x), value=TRUE)))
my_list$at <-c(my_list$at,gsub("#|@|\\.","",grep("@",unlist(x), value=TRUE)))

my_list
$hash
[1] "twitter" "second" 

$at
[1] "johnsmith" "joesmith"  "jillsmith" "joansmith"