【问题标题】:Error in rsqlite_send_query(conn@ptr, statement) : duplicate column name: Retrsqlite_send_query(conn@ptr, statement) 中的错误:重复的列名:Ret
【发布时间】:2017-07-13 09:52:42
【问题描述】:

我有一堆运行良好的 sql 查询,但现在由于某种原因不再运行。数据没有改变。代码没有改变。

我不断收到此错误消息:

rsqlite_send_query(conn@ptr, statement) 中的错误:重复列 姓名:雷特

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

 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 中的左连接可以实现的事情(作为约束的不等式等)。

这些是我加载的包:

这是我的会话信息():

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

语言环境:1 LC_CTYPE=en_US.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

附加的基础包:1parallel tcltk splines stats
graphics grDevices utils datasets methods base

其他附加包:1forcats_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
树_1.0-37 [28] 随机森林_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

通过命名空间加载(未附加):1reshape2_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 网格_3.3.3 工具_3.3.3 三明治_2.3-4
magrittr_1.5 [19]lazyeval_0.2.0 Formula_1.2-1 assertthat_0.1 迭代器_1.0.8 R6_2.2.0

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

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

更新我:我已经升级到 sqldf_0.4-11 和 RSQLite_2.0.... 仍然遇到这个问题。我还尝试加载 sqldf(和依赖项).... 代码仍然无法正常工作

更新二:首先,我要感谢G。 Grothendieck 感谢他在这个问题上的帮助以及这些年来他对 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 连接都可以再次工作了....去图

【问题讨论】:

  • 你能提供一个可重现的例子吗?
  • 我收到了同样的错误信息,但在将 RSQLite 升级到 2.1.1 后它消失了

标签: r dplyr sqldf rsqlite fuzzyjoin


【解决方案1】:

在这个可重现的示例(使用 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

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    相关资源
    最近更新 更多