abordagem sqldf
.
Uma abordagem que mostra uma advertência com a abordagem join
- você não pode usar WHERE data_id
em ambas as tabelas se ingressar em data_id
.
Código 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
Saída errada porque data_id = 1
também deve estar ativo
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
Código 2
Código
df3 <- sqldf("SELECT event_value, name
FROM file1
LEFT JOIN file2 USING(data_id)
WHERE data_id = 1")
Saída em branco porque join
já foi aplicado
[1] event_value name
<0 rows> (or 0-length row.names)
Código 3
Do WHERE
anterior
df3 <- sqldf("SELECT event_value, name
FROM file1
WHERE data_id = 1
LEFT JOIN file2 USING(data_id)")
Erro de saída porque duas tabelas são de tamanho diferente, então WHERE
deve ser aplicado em ambas as tabelas
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
Código 4
Usando dois SELECT
s com 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)")
Erro de saída
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
Talvez, um erro de sintaxe com o segundo SELECT
e seu anexo com JOIN
.