2017-10-10 6 views
1

私は2つのデータフレームを持っています。最初の1:grepを使用してテキストにタグを付けてrに貼り付けます

keyword <- c("apple","peach","grape","berry","kiwi fruit") 
keyword <- data.frame(keyword) 

enter image description here

秒1:

sentence <- c("I like apple","I hate apple","grape is good") 
url <- c("url1","url2","url3") 
sentence <- data.frame(sentence,url) 

enter image description here

は私がするために必要なものは次のとおりです。キーワードが文に含まれている場合、URLを貼り付けるテキストに。複数の文章にキーワードが含まれている場合は、すべてのURLを貼り付けます。

enter image description here

私は怒鳴るようなコードを使用しようとしましたが、予想通り、それがうまくいかなかった。最終的な結果は次のようです。

keyword$Label <- character(length(keyword$keyword)) 

for (i in 1:length(keyword$keyword)) { 
keyword$Label[grep(keyword$keyword[i],sentence$sentence)] <- sentence$url 
} 
+0

これをどうすればいいのか理解するのに助けが必要ですか? (コードワイズ)または何をすべきか知りたいですか? (概念的に) 私は条件結合のようなものを作ることを提案しています...(コンセプトは賢明です) – zwep

+0

私はコードワイズの解決法が必要です。ありがとう –

答えて

2

stringr + dplyr + tidyrと解決策:

library(stringr) 
library(dplyr) 
library(tidyr) 

sentence %>% 
    mutate(sentence = str_extract(sentence, paste0(keyword$keyword, collapse = "|"))) %>% 
    right_join(keyword, by = c("sentence" = "keyword")) %>% 
    group_by(sentence) %>% 
    mutate(URL = 1:n()) %>% 
    spread(URL, url, sep = "") %>% 
    rename(keyword = sentence) 

結果:

# A tibble: 5 x 3 
# Groups: keyword [5] 
    keyword URL1 URL2 
*  <chr> <chr> <chr> 
1  apple url1 url2 
2  berry <NA> <NA> 
3  grape url3 <NA> 
4 kiwi fruit <NA> <NA> 
5  peach <NA> <NA> 

データ:

keyword <- c("apple","peach","grape","berry","kiwi fruit") 
keyword <- data.frame(keyword, stringsAsFactors = FALSE) 
sentence <- c("I like apple","I hate apple","grape is good") 
url <- c("url1","url2","url3") 
sentence <- data.frame(sentence,url, stringsAsFactors = FALSE) 
関連する問題