sqldf
подход. Один подход, который показывает предостережение с подходом join
— вы не можете использовать WHERE data_id
в обеих таблицах, если вы присоединяетесь по data_id
.
Код 1
file1 <- read.table("data.csv", col.names=c("data_id", "event_value"))
file2 <- read.table("log.csv", col.names=c("data_id", "name"))
library("sqldf")
df3 <- sqldf("SELECT event_value, name
FROM file1
LEFT JOIN file2 USING(data_id)")
df3
Вывод неверный, так как data_id = 1
тоже должен быть активным
Loading required package: gsubfn
Loading required package: proto
Loading required package: RSQLite
Loading required package: tcltk
Warning message:
Quoted identifiers should have class SQL, use DBI::SQL() if the caller performs the quoting.
event_value name
1 event_value name
2 777 leo
3 666 leo
4 111 leopold
5 123 <NA>
6 324 lorem
7 245 leo
Код
df3 <- sqldf("SELECT event_value, name
FROM file1
LEFT JOIN file2 USING(data_id)
WHERE data_id = 1")
Вывод пуст, поскольку join
уже применено
[1] event_value name
<0 rows> (or 0-length row.names)
Выполните WHERE
ранее
df3 <- sqldf("SELECT event_value, name
FROM file1
WHERE data_id = 1
LEFT JOIN file2 USING(data_id)")
Ошибка вывода, поскольку две таблицы имеют разный размер, поэтому WHERE
следует применить к обеим таблицам
Error in rsqlite_send_query(conn@ptr, statement) :
near "LEFT": syntax error
Calls: sqldf ... initialize -> initialize -> rsqlite_send_query -> .Call
In addition: Warning message:
Quoted identifiers should have class SQL, use DBI::SQL() if the caller performs the quoting.
Execution halted
Использование двух SELECT
s с JOIN
df3 <- sqldf("SELECT event_value, name
FROM file1
WHERE data_id = 1
LEFT JOIN
(SELECT data_id, name
FROM file2
WHERE data_id = 1)
USING(data_id)")
Ошибка вывода
Error in rsqlite_send_query(conn@ptr, statement) :
near "LEFT": syntax error
Calls: sqldf ... initialize -> initialize -> rsqlite_send_query -> .Call
In addition: Warning message:
Quoted identifiers should have class SQL, use DBI::SQL() if the caller performs the quoting.
Execution halted
Возможно, синтаксическая ошибка со вторым SELECT
и его присоединением к JOIN
.