標準の "col1" = "col2" 結合を使用していない場合、dplyr 結合を機能させるのに苦労しています。私が経験したことの2つの例を次に示します。
まず:
library(dplyr)
tableA <- data.frame(col1= c("a","b","c","d"),
col2 = c(1,2,3,4))
inner_join(tableA, tableA, by = c("col1"!="col1")) %>%
select(col1, col2.x) %>%
arrange(col1, col2.x)
エラー:
by
自然結合の場合は (名前付き) 文字ベクトル、リスト、または NULL でなければなりません (製品コードでは推奨されません)。論理的ではありません
このコードを複製してSQLを使用すると、次のようになります。
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
copy_to(con, tableA)
tbl(con, sql("select a.col1, b.col2
from
tableA as a
inner join
tableA as b
on a.col1 <> b.col1")) %>%
arrange(col1, col2)
SQL クエリの結果:
# Source: SQL [?? x 2]
# Database: sqlite 3.19.3 [:memory:]
# Ordered by: col1, col2
col1 col2
<chr> <dbl>
1 a 2
2 a 3
3 a 4
4 b 1
5 b 3
6 b 4
7 c 1
8 c 2
9 c 4
10 d 1
# ... with more rows
2番目の部分は最後の部分と似ています:
inner_join(tableA, tableA, by = c("col1" > "col1")) %>%
select(col1, col2.x) %>%
arrange(col1, col2.x)
エラー:
by
自然結合の場合は (名前付き) 文字ベクトル、リスト、または NULL でなければなりません (製品コードでは推奨されません)。論理的ではありません
相当する SQL:
tbl(con, sql("select a.col1, b.col2
from tableA as a
inner join tableA as b
on a.col1 > b.col1")) %>%
arrange(col1, col2)
2 番目の SQL クエリの結果:
# Source: SQL [?? x 2]
# Database: sqlite 3.19.3 [:memory:]
# Ordered by: col1, col2
col1 col2
<chr> <dbl>
1 b 1
2 c 1
3 c 2
4 d 1
5 d 2
6 d 3
これらのSQLの例を作成する方法を知っている人はいますが、dplyrコードを使用していますか?