2015-11-07 5 views
0

Я работаю с набором твитов (очень оригинальный, я знаю) в R и хотел бы извлечь текст после каждого знака @ и после каждого # и поместить их в отдельные переменные , Например:R совпадающее выражение несколько раз в той же строке

Это тестовое твит, использующее #twitter. @johnsmith @joesmith.

В идеале я хотел бы, чтобы создать новые переменные в dataframe, который имеет твиттер JohnSmith joesmith и т.д.

В настоящее время я использую данных $ в < - str_match (данные $ tweet_text "\ s @ \ ш + ") данные $ хэш < - str_match (данные $ tweet_text," \ s # \ w + ")

Это, очевидно, дает мне первое вхождение каждого в новую переменную. Какие-либо предложения?

ответ

2

strsplit и grep будет работать:

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

Это работало для пульса каждое выражение. Есть ли способ поместить вывод в новые переменные в существующем фреймворке? – dhrice

+0

Это не работает в 'data.frame', потому что вы добавляете в столбцы разные числа переменных. Например, если вы добавите «johnsmith» «joesmith» в столбец «at», что вы добавляете в те же строки в столбце «хэш»? Он будет работать в «списке». Я уточню свой ответ. –

+0

Моя первоначальная мысль заключалась в том, чтобы сделать это отдельно. В идеале я хотел бы, чтобы код искал текст для первого шаблона с знаком @ и помещал его в переменную, затем снова выполнял поиск для другого и помещал его во вторую переменную и так далее. Для строк, которые имеют меньше других, введите NA или что-то еще. Если это не так, я думаю, что ваш код заставит меня участвовать в этом, и я смогу работать с чем-то другим. – dhrice

Смежные вопросы