rsqlite_send_query(conn @ ptr,statement)出错:重复的列名:Ret

时间:2017-07-13 09:52:42

标签: r dplyr sqldf rsqlite fuzzyjoin

我有一堆sql查询工作正常但现在,由于某种原因,不再工作。数据没有改变。代码没有改变。

我不断收到此错误消息:

  

rsqlite_send_query(conn @ ptr,statement)出错:重复列   名称:Ret

这些错误往往发生在左连接上。在下面找到一个例子:

 g.cper<-sqldf("select a.*, b.NAV_EUR, b.AUM_EUR
           from g2_c as a
            left join 
            nav_master as b
            on a.fund_id=b.fund_id and a.period = b.period")

所讨论的表中都没有包含名为“Ret”的变量

我最近更新了所有包裹。

这是遗留代码。我倾向于尽可能使用dplyr :: left_join。但是left_join永远不会做SQL中的左连接可以实现的东西(不等式作为约束等)。

这些是我加载的包:

  

包&lt; - c(“ISLR”,“gam”,“biglm”,“dplyr”,“gtools”,“tidyr”,                 “randomForest”,“splines”,“tree”,“pROC”,“lfe”,“lubridate”,                 “stargazer”,“鳞片”,“ggplot2”,“鳞片”,“data.table”,“动物园”,“PerformanceAnalytics”,                 “stats”,“proto”,“timeSeries”,“timeDate”,“gsubfn”,“fBasics”,“DBI”,“RSQLite”,“sqldf”,                 “RODBC”,“tcltk”,“reshape”,“xts”,“data.table”,“parallel”,                 “lfe”,“readr”,“purrr”,“tibble”,“hms”,“stringr”,“lubridate”,“forcats”)

这是我的sessioninfo():

  

sessionInfo()R版本3.3.3(2017-03-06)平台:x86_64-redhat-linux-gnu(64位)运行于:Red Hat Enterprise   Linux Server 7.3(Maipo)

     

区域设置:1 LC_CTYPE = zh_CN.UTF-8 LC_NUMERIC = C
  LC_TIME = en_US.UTF-8 [4] LC_COLLATE = en_US.UTF-8
  LC_MONETARY = en_US.UTF-8 LC_MESSAGES = en_US.UTF-8 [7]   LC_PAPER = en_US.UTF-8 LC_NAME = C LC_ADDRESS = C
  [10] LC_TELEPHONE = C LC_MEASUREMENT = en_US.UTF-8   LC_IDENTIFICATION = C

     

附加基础包:1并行tcltk splines stats
  graphics grDevices utils数据集方法库

     

其他附件包:1 forcats_0.2.0
  stringr_1.2.0 hms_0.3 [4]   tibble_1.2 purrr_0.2.2
  readr_1.0.0 [7] reshape_0.8.6
  RODBC_1.3-14 sqldf_0.4-10 [10]   RSQLite_1.1-2 fBasics_3011.87
  gsubfn_0.6-6 [13] timeSeries_3022.101.2
  timeDate_3012.100 proto_1.0.0 [16]   PerformanceAnalytics_1.4.3541 xts_0.9-7 zoo_1.7-14   [19] data.table_1.10.4 ggplot2_2.2.1
  scales_0.4.1 [22] stargazer_5.2
  lubridate_1.6.0 lfe_2.5-1998 [25]   Matrix_1.2-8 pROC_1.9.1
  tree_1.0-37 [28] randomForest_4.6-12
  tidyr_0.6.1 gtools_3.5.0 [31]   dplyr_0.5.0 biglm_0.9-1 DBI_0.5-1   [34] gam_1.14 foreach_1.4.3
  ISLR_1.0

     

通过命名空间加载(而不是附加):1 reshape2_1.4.2
  lattice_0.20-34 colorspace_1.3-2 chron_2.3-50 plyr_1.8.4
  munsell_0.4.3 [7] gtable_0.2.0 codetools_0.2-15 memoise_1.0.0   labeling_0.3 Rcpp_0.12.9 xtable_1.8-2 [13] digest_0.6.12   stringi_1.1.2 grid_3.3.3 tools_3.3.3 sandwich_2.3-4
  magrittr_1.5 [19] lazyeval_0.2.0 Formula_1.2-1 assertthat_0.1   iterators_1.0.8 R6_2.2.0

不确定这是否与this question有关请记住我使用的是RSQLite_1.1-2(早于2.0)

老实说,我不知道发生了什么,也没有在网上找到任何东西......

更新I:我已升级到sqldf_0.4-11和RSQLite_2.0 ....仍然遇到此问题。我也尝试加载sqldf(和依赖项)....代码仍然不起作用

更新II:首先,我要感谢 G.格洛腾迪克这些年来他在这个问题上的帮助和他的R贡献。

在这个特殊问题上,我尝试使用mtcars运行测试查询。这是代码:

b<- sqldf("select a.*, b.mpg as test from mtcars as a left join mtcars as b on a.mpg=b.mpg")

此查询有效!​​!! 。然后我运行代码,即使在更新到sqldf 0.4.11和RSQLite 2.0之后仍然无效(请参阅更新I)。令我惊讶的是它现在有效!!! .... 我不知道发生了什么,但我所有的sqldf查询现在都在工作。 仅供参考我...我在AWS工作............我有时会发现这些无法解释的奇怪事情......

更新III 问题又回来了。所以我再次在更新II中运行测试代码。这有效。运行该测试代码后,我所有的sqldf再次加入工作...... GO Figure

1 个答案:

答案 0 :(得分:0)

在这个可重复的例子中(使用sqldf 0.4.11和RSQLiute 2.0),它按预期工作。请查看https://stackoverflow.com/help/how-to-askhttps://stackoverflow.com/help/mcve

library(sqldf)

g2_c <- nav_master <- data.frame(fund_id = 1:2, period = 1:2, NAV_EUR = 0, AUM_EUR = 0)
sqldf("select a.*, b.NAV_EUR, b.AUM_EUR
       from g2_c as a
       left join nav_master as b
         on a.fund_id=b.fund_id and a.period = b.period")

,并提供:

  fund_id period NAV_EUR AUM_EUR NAV_EUR AUM_EUR
1       1      1       0       0       0       0
2       2      2       0       0       0       0