使用sqlite数据源

时间:2015-10-16 19:11:29

标签: r join dplyr

我喜欢dplyr中的联接。无论数据源(本地数据帧,远程数据库表)如何,它们都能非常顺利地工作。 但是,我遇到了一个问题,其中联接的行为因数据源而异。我需要解决下面描述的问题。我认为这不是一个错误,而是与后端是sqlite有关。

我可以使用dplyr轻松加入以下表格。

observation <- data.frame(id=101:105, specimen_id=1:5, variable_id=1:5, value=rnorm(5))
specimen <- data.frame(id=1:5, specimen_name=LETTERS[1:5], species_id=1:5)
species <- data.frame(id=1:5, species_name=LETTERS[11:15])
variable <- data.frame(id=1:5, variable_name=LETTERS[6:10])

observation %>% 
  left_join(specimen, by=c("specimen_id"="id")) %>%
  left_join(species, by=c("species_id"="id")) %>%
  left_join(variable, by=c("variable_id"="id")) 

结果是

   id specimen_id variable_id      value specimen_name species_id species_name variable_name
1 101           1           1 -0.6782149             A          1            K             F
2 102           2           2 -1.3226305             B          2            L             G
3 103           3           3 -0.2670939             C          3            M             H
4 104           4           4 -1.2546326             D          4            N             I
5 105           5           5 -1.1453585             E          5            O             J

但是,如果我将相同的数据帧复制到sqlite数据源,则相同的连接代码将失败。

#create a database locally, and copy the dataframes
my_db <- src_sqlite("my_db.sqlite3", create = T)

copy_to(my_db, df=observation, temporary = FALSE)
copy_to(my_db, df=specimen, temporary = FALSE)
copy_to(my_db, df=species, temporary = FALSE)
copy_to(my_db, df=variable, temporary = FALSE)

#connect to those tables using dplyr
observation <- tbl(my_db, "observation")
specimen <- tbl(my_db, "specimen")
species <- tbl(my_db, "species")
variable <- tbl(my_db, "variable")

现在,相同的连接代码将失败。

observation %>% 
  left_join(specimen, by=c("specimen_id"="id")) %>%
  left_join(species, by=c("species_id"="id")) %>%
  left_join(variable, by=c("variable_id"="id")) 

导致以下错误:

Error in sqliteSendQuery(conn, statement) : 
 error in statement: ambiguous column name: id.y

0 个答案:

没有答案