2015-01-30 12 views
1

У меня есть кадр данных «Testdata» следующим образом:Использование grepl в R, чтобы соответствовать строку

id  content 
1  I came from China 
2  I came from America 
3  I came from Canada 
4  I came from Japan 
5  I came from Mars 

И у меня есть еще данные кадра «эл» следующим образом:

id addr 
1 America 
2 Canada 
3 China 
4 Japan 

Тогда как можно использовать grepl, sapply или любую другую полезную функцию в R, чтобы генерировать данные в следующим образом:

id content    addr 
1 I came from China  China 
2 I came from America America 
3 I came from Canada Canada 
4 I came from Japan  Japan 
5 I came from Mars  Mars 
+0

мои Testdata являются twittes размещенные пользователями. поэтому они не такие аккуратные, как этот образец. Я могу использовать grep или grepl только для поиска, если каждый testData.content содержит любые слова в addr, я думаю. – DuFei

ответ

0

Это делает трюк:

vec = addr$addr 

testData$addr = apply(testData, 1, function(u){ 
    bool = sapply(vec, function(x) grepl(x, u[['content']])) 
    if(any(bool)) vec[bool] else NA 
}) 
+0

Извините, я не могу использовать gsub. Для реальных данных это не так аккуратно. Это твиттеры, которые публикуют настоящие люди. Я хочу найти, есть ли в этом твиттере какие-то конкретные слова. Если какой-либо твиттер имеет какие-то конкретные слова, которые я хочу найти. то эти слова будут добавлены в твиттер, или нет. – DuFei

+0

Я отредактировал свой ответ соответственно. –

+0

Это работает. Большое спасибо! :) – DuFei

0

Похоже, вы просто хотите скопировать столбец и удалить «Я пришел из»

testData$addr <- gsub("I came from ", testData$content) 
+0

Извините, может быть, я не прояснил ситуацию. В моих реальных данных могут быть виды текста. например «это Китай», «Он родом из Китая, но не реален» и так далее. Во всяком случае, я не могу использовать gsub или regex для этого. Я могу использовать grepl только для поиска, если каждая строка testData содержит любые слова в addr (или другой вектор строки). Если это так, слово будет добавлено в строку, или нет. – DuFei

+0

, тогда вы должны добавить примеры, подобные этому в исходном вопросе. Почему вы не можете использовать регулярное выражение? Это вопрос домашнего задания? – JeremyS

+0

Извините, пример, который я поставил, не очень хороший. Поскольку слова, которые я хочу найти в тексте, не определены. И содержимое testData $ сложно. Поэтому я думаю, что я могу использовать grepl только для поиска слов в тексте. Это не вопрос домашней работы. Я встретил его, когда занимаюсь другой задачей. – DuFei