替代sqlite或更好的方法来处理sqlite中的日期/时间字段

时间:2012-05-04 18:56:56

标签: r sqlite date data.table

我的数据往往是中等到大,但从来没有资格成为“大”数据。数据几乎总是复杂的关系。出于我在这里谈论的目的,10-50个表,总大小为1-10 GB。而已。当我处理大于此数据的数据时,我会将其粘贴到Postgres或SQL Server中。

总的来说,我喜欢SQLite,但我使用的数据有很多很多的日期/日期时间字段,在SQLite中处理日期字段让我很头疼,当我在R和SQLite之间来回移动数据时,我的日期经常被破坏。

我正在寻找一种基于文件的SQLite替代方法,它很容易使用R。

OR

更好的技术/包,用于将数据移入/移出SQLite和R而不会破坏日期。我的目标是停止破坏我的约会。例如,当我使用RSQLite包中的dbWriteTable时,我的日期通常会以一种无法使用的方式搞砸。

我的主工作站正在运行Ubuntu,但我在一个以Windows为主的办公室工作。如果建议替代SQLite,+++可以在两个平台(或更多)上运行。

2 个答案:

答案 0 :(得分:2)

使用纪元时间和日期(距离原点的天数,距离原点的秒数)。使用epochs到R POSIXct或Date的转换很快(字符串非常慢)。

编辑:在重新阅读并考虑数据大小后的另一种选择:

您可以直接以R格式保存表格,可能只需要一小段额外的元数据来描述表格之间的关键关系。你必须创建自己的约定和所有,但它肯定更平滑(没有阻抗不匹配)。

另外,我个人非常偏爱包data.table。它速度快,并且具有纯R的语法,但具有很好的SQL概念映射。例如。在dt[i, j, by=list(...)]中,i对应于“where”,j对应于“select”,by对应“group by”,并且还有连接工具,尽管我在那些周围写了中缀包装,因此更容易记住。

我通常只在R中完成数据处理工作(在从SQLITE初始拉取之后),我发现data.table比大规模SQLDF查询更快更实用。

http://datatable.r-forge.r-project.org/

答案 1 :(得分:0)

sqlite想要以标准格式“YYYY-MM-DD HH:MM:SS”读取数据(如果不需要,可以省略时间部分)---我不知道读取任意日期字符串的方法。这会导致存储标准化日期。

在输出时,您希望使用sqlite函数将日期格式化为您的其他软件所需的格式 - 检查strftime()的选项。

例如,Octave喜欢从0年开始的日期编号,所以如果我有一个带有“date”列的表mydata,我会做

从mydata选择julianday(mydate)-1721059.666667

神奇的数字是julianday(“0000-01-01T00:00:00-04:00”)并且补偿了julianday在公元4017年开始或类似的事实,而Octave从0年开始计算。