问题标签 [rsqlite]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3243 浏览

r - rsqlite_send_query(conn@ptr, statement) 中的错误:重复的列名:Ret

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

我不断收到此错误消息:

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

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

有问题的表都不包含名为“Ret”的变量

我最近更新了我所有的包。

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

这些是我加载的包:

包 <- c("ISLR","gam","biglm","dplyr","gtools","tidyr","randomForest","splines","tree","pROC","lfe"," lubridate”、“stargazer”、“scales”、“ggplot2”、“scales”、“data.table”、“zoo”、“PerformanceAnalytics”、“stats”、“proto”、“timeSeries”、“timeDate”、 gsubfn","fBasics","DBI","RSQLite","sqldf","RODBC","tcltk","re​​shape","xts","data.table","parallel","lfe","阅读器”、“咕噜”、“小声”、“hms”、“stringr”、“lubridate”、“forcats”)

这是我的会话信息():

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

语言环境: 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

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

其他附加软件包: 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

不确定这是否与这个问题有关请记住我使用的是 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 工作............我有时会发生这些无法解释的奇怪事情......

更新三问题又回来了。所以我再次在更新 II 中运行测试代码。这行得通。在运行了该测试代码之后,我所有的 sqldf 连接都再次工作了....去图

0 投票
3 回答
646 浏览

r - 使用具有引用值的 RSQLite 加载数据

我正在尝试使用 RSQLite 包(我也尝试过 sqldf 包)将一个大的 csv 文件加载到 SQL lite 数据库中。该文件包含所有英国邮政编码和它们的各种查找值。

我想避免将其加载到 R 中,而直接将其加载到数据库中。虽然这对于这项任务并不是绝对必要的,但我想这样做是为了让该技术为将来必须处理的较大文件做好准备,这些文件将不适合内存。

不幸的是,csv 提供了双引号中的值,而 dbWriteTable 函数似乎无法删除它们或以任何形式忽略它们。这里是文件的下载位置:http: //ons.maps.arcgis.com/home/item.html?id= 3548d835cff740de83b527429fe23ee0

这是我的代码:

遇到这个问题后,我找到了推荐使用 sqldf 包的参考教程(https://www.r-bloggers.com/r-and-sqlite-part-1/),但不幸的是,当我尝试使用相关功能时在 sqldf (read.csv.sql) 中,我用双引号遇到同样的问题。

将 csv 文件导入 sql 系统时,这感觉是一个相当普遍的问题,大多数导入工具都能够处理双引号,所以我很惊讶遇到这个问题(除非我错过了关于这个问题的明显帮助文件沿途某处)。

编辑 1

以下是我的 csv 文件中的一些示例数据,格式为 SQL 表的 dput 输出:

编辑 2

这是我在 sqldf 的 read.csv.sql 函数中使用 filter 参数的尝试(请注意,Windows 用户需要为此安装rtools)。不幸的是,这似乎仍然没有从我的数据中删除引号,尽管它确实神秘地删除了所有空格。

另外,感谢任何认为这不是 Stack Overflow 范围内的编程问题的人的密切投票(?!)。

0 投票
1 回答
149 浏览

r - RSQLite - 在 /var/tmp 中创建数据库日志文件

我有一个 sqlite 数据库,我在其中创建表并每天附加新结果。这个过程是手动的,进入 RStudio 并点击运行!

我决定使用 Jenkins 安排我的脚本,在过去的 5 个小时里我无法运行它,因为我不断收到以下错误:

最初认为这取决于权限,所以作为一个优秀的 unix 公民,我将我的 db 修改为 777。同样的错误!

然后(不幸的是)掉进了更新包的兔子洞:dplyr,,dbplyr-DBI阅读每个包中的所有最新更改,等等。不是幸运......

直到我dbname.sqlite3-journal在 Rstudio 文件窗口中看到一个闪烁。事实证明,这个文件是由 sqlite 为临时表和索引创建的。

显然,一旦所有事务完成并与数据库断开连接,该文件就会消失。

显然詹金斯没有修改这个文件的权限。

一种解决方法是完全写入目录,这是我目前正在做的并且正在工作的目录。

但我想知道是否有办法将这个文件发送到/var/tmp?不热衷777战略。

就像是:

0 投票
2 回答
131 浏览

r - 连接到外部硬盘驱动器上的 Monetdblite/RSQLite 数据库时的 Dplyr 速度?

一个初学者的问题。

我正在使用 Rdplyr来分析大量数据,但我无权访问基于服务器的数据库。此外,我的计算机的内部硬盘驱动器对于我需要创建的数据库来说太小了。到目前为止,我一直在使用monetdbliteRSQLite存储数据。

:如果我将数据库保存在外部硬盘驱动器上并通过 USB 连接到计算机,速度monetdblite/会降低多少?RSQLite哪些因素决定了它的可行性?

或者在我的情况下是否有更好的替代方法(仍然依赖dplyr的数据库连接)?

0 投票
1 回答
325 浏览

r - 如何将 Sqlite 数据库与 R Studio 连接?

我对在 R 中使用 sqlite 数据库非常陌生。

安装 SQLite 时出错

install.packages("RSQLite")

并且无法打开 URL ' http://www.stats.ox.ac.uk/pub/RWin/src/contrib/PACKAGES.rds ':HTTP 状态为 '404 Not Found'

库中的错误(SQLite):没有名为“SQLite”的包</p>

0 投票
3 回答
2177 浏览

r - 为 RSQLite 中的现有数据库表添加值

我是 RSQLite 的新手。我有一个文本格式的输入文档,其中的值分别由“|” 我创建了一个包含所需变量的表(虚拟代码如下)

但是,我对如何将值导入创建的表感到震惊。我无法使用 INSERT INTO Values 命令,因为原始数据文件中有数千行和 20 多列,并且无法手动输入每个数据点。

有人可以提出另一种有效的方法吗?

0 投票
0 回答
682 浏览

r - 在 R 中加速时间序列数据的 SQL 查询

我有一个数据库,其中包含历史河流水位和降雨数据。有一个“水位”表,其属性包括进行测量的日期以及该日期的河流水位。还有一个“降雨”表,同样,该表具有日期和该日期的降雨量等属性。

我想对这些数据(在 R 中)进行一些回归,所以我试图将我的数据转换为以下格式:

这种格式意味着预测当前级别所需的所有数据都包含在一行中。

我有一些(非常丑陋的)代码可以做到这一点,但它太慢了。

以下代码尝试从 2000 年以来的仅几年中仅从 1 个仪表中选择前一天的级别。(有关级别和降雨的更多历史,我只需包含更多子查询。)

这个大大简化和减少的查询在 R 中执行大约需要 30 分钟(使用 ans=dbGetQuery(db, query))。这只返回约 6000 行,而我想要的完整数据集将是约 8000 万行。

我怎样才能加快这个查询,以便我可以在合理的时间内以我需要的格式获取数据?

编辑:示例输入数据

示例输出数据:

0 投票
3 回答
1582 浏览

r - 如何在 R 中安装包 RSQLite.extfuns

我在安装包 RSQLite.extfuns 时遇到问题。我得到错误:

我尝试通过从 https://cran.r-project.org/src/contrib/Archive/RSQLite.extfuns/下载文件来手动执行此操作, 但也有负面影响。谁能解决我的问题?

0 投票
0 回答
610 浏览

date - dbWriteTable 日期格式

光环,

我通过将 MS-Access 中的表导入 R

现在我将 RSQLite 用于 SQL 查询和其他东西

问题是,在 sqlFetch 步骤中,包括数据的列仍然正确,经过测试,class(foo_import$Datetime)它给出了POSIXct POSIXt

在使用 dbWriteTable 并测试class(R_Table$Datetime) 给出numeric 日期只是数字的格式之后

我可以手动转换列。它们是自动将格式更改为日期格式的其他选项吗?

0 投票
2 回答
391 浏览

r - 如何将数据“刷新”到我的 RSQLite 磁盘数据库?

我正在使用 R 包 dbplyr 创建一个数据库,使用 RSQLite,但是尽管我写(和读回)一个表,但我的数据库在磁盘上的大小是零字节。这是我的脚本:

但是正如您从最后的 ls -l 中看到的那样,我的数据库大小为 0,即使脚本确实从数据库中读取了 mtcars(所以它就在那里)。我想使用数据库文件与另一个程序共享数据,那么如何定期将数据“刷新”到磁盘?