2015-11-07 31 views
0

我在R中使用了一組Tweets(非常原創,我知道),並且想要在每個@符號之後和每個#之後提取文本,並將它們放入單獨的變量中。例如:R在同一行中多次匹配表達式

這是一個使用#twitter的測試推文。 @johnsmith @joesmith。

理想我想它有嘰嘰喳喳JohnSmith對JOESMITH數據幀等

目前創造新的變數,我使用 數據$在< - str_match(數據$ tweet_text,「\ S @ \ w + 「) data $ hash < - str_match(data $ tweet_text,」\ s#\ w +「)

這顯然給了我第一次出現的每個新變量。有什麼建議麼?

回答

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" 

UPDATE把導致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" 
+0

這對pul對每個表達進有沒有辦法將輸出放入現有數據框的新變量中? – dhrice

+0

它不會在'data.frame'中工作,因爲您將在列中添加不同數量的變量。例如,如果您在「at」列中添加「johnsmith」「joesmith」,那麼您在「hash」列中的相同行中添加了什麼?它會在'list'中工作。我會更新我的答案。 –

+0

我最初的想法是分開做。理想情況下,我希望代碼使用@符號搜索第一個模式的文本,並將其放入一個變量中,然後再次搜索另一個並將其放入第二個變量中,依此類推。對於少於其他行的行,請輸入NA或其他內容。 如果失敗了,我認爲你的代碼會讓我成爲那裏的一部分,並且我可以做其他事情。 – dhrice