2017-08-11 9 views
2

Rに2つのデータフレームがあり、データフレーム "y"のようなデータフレーム "x"を使用してクエリを実行します。他のデータフレームの列を使用してデータフレームを照会する方法R

私はこのコードを持っている:

x <- c('The book is on the table','I hear birds outside','The electricity 
came back') 
x <- data.frame(x) 
colnames(x) <- c('text') 
x 

y <- c('book','birds','electricity') 
y <- data.frame(y) 
colnames(y) <- c('search') 
y 

r <- sqldf("select * from x where text IN (select search from y)") 
r 

を私はここで、「のような」を使用すると思いますが、私は知っているドント。 助けてもらえますか?これは、より多様治具なしであなたが欲しいものであれば

library(dplyr) 
library(fuzzyjoin) 

regex_join(
    mutate_if(x, is.factor, as.character), 
    mutate_if(y, is.factor, as.character), 
    by = c("text" = "search") 
) 

#       text  search 
# 1 The book is on the table  book 
# 2  I hear birds outside  birds 
# 3 The electricity \ncame back electricity 

答えて

2

あなたがsqldfソリューションをしたい場合は、私はこれが仕事だと思う:

sqldf("select x.text, y.search FROM x JOIN y on x.text LIKE '%' || y.search || '%'") 

##       text  search 
## 1 The book is on the table  book 
## 2  I hear birds outside  birds 
## 3 The electricity \ncame back electricity 
+0

感謝。そして、 "y"の各単語を使って "x"をフィルタリングする必要があるのでしょうか? –

+0

これはコードの機能ですか? 'y < - c( 'book'、 'birds'')のように、1つまたは2つの項だけを含むように' y'を変更すると、 'x'の最初の2行だけが表示されます。あなたが望んでいたことはありませんか? –

+0

ありがとうございます。 –

0

あなたがfuzzyjoinパッケージを使用することができます。少しバリエーションを追加するために、y$search - y = c('book','birds','electricity', 'cat')に余分な単語を追加しました。より多くのバリエーションがさらに明らかになります

どの単語がどのステートメントに含まれているか知っていますか?ちょうど一致する行を引き出しsapplygrepl

> m = sapply(y$search, grepl, x$text) 
> rownames(m) = x$text 
> colnames(m) = y$search 
> m 
          book birds electricity cat 
The book is on the table  TRUE FALSE  FALSE FALSE 
I hear birds outside  FALSE TRUE  FALSE FALSE 
The electricity \ncame back FALSE FALSE  TRUE FALSE 

> library(magrittr) # To use the pipe, "%>%" 
> x %>% data.table::setDT() # To return the result as a table easily 
> 
> x[(sapply(y$search, grepl, x$text) %>% rowSums() %>% as.logical()) * (1:nrow(x)), ] 
          text 
1: The book is on the table 
2:  I hear birds outside 
3: The electricity \ncame back 

@Aurèleのソリューションは、一致するテキストと一致するテキストに最適な結果を提供します。 backy$searchでもある場合は、一致するさまざまな検索語の結果でThe electricity \ncame backのテキストが2回報告されるため、一意性が重要でない場合は、これが優れています。

したがって、お望みの出力に大きく左右されます。

0

それは知っているのは難しい:

関連する問題