2

我正在使用sqldf连接几个表,但我无法在列上保留times包含包的类集chron。我使用了函数的method="name__class"参数,sqldf并用类适当地命名了我的列,但我的times变量在选择后没有保留sqldf

是否可以选择一个times类列并保留该类,或者我必须在 SQL 选择之后重置该类(这并不理想)。我已经包含了一个玩具示例,它显示了如何sqldf保留 Date 类,而不是times类:

 library(chron)
 mytime = data.frame(x=times(c("11:45:00", "12:15:00")))
 mytime$y = as.Date(c("2019-09-01", "2019-09-11"))
 mytime

         x          y
1 11:45:00 2019-09-01
2 12:15:00 2019-09-11
 class(mytime$x)
[1] "times"
 class(mytime$y)
[1] "Date"


 sqldf('select x as x__times, y as y__Date from mytime', method = "name__class")

    x__times         y
1 0.4895833 2019-09-01
2 0.5104167 2019-09-11

在此先感谢您的帮助。

4

1 回答 1

4

sqldf寻找as.X转换为类X,但没有as.times,所以它假定它times不是一个类,并且x__times是您想要使用的实际名称。

要解决此定义as.times

as.times <- times

方法="自动"

此外,如果您添加一个as.times定义,则为@A。Suliman 在评论中指出,您实际上不需要name__class在这种情况下使用,因为默认值method="auto"已经自动将与输入列同名的任何输出列转换为该输入列的类。

RH2

与 SQLite 不同,H2 数据库确实支持日期和时间类,因此如果您使用 H2 数据库后端 RH2,则无需定义as.times.

library(RH2)
library(sqldf)
sqldf("select x, y from mytime")

如果您想返回 SQLite,请确保首先分离 RH2,因为如果加载它,它将假定您需要它,除非您根据?sqldf.

新问题

这已作为新问题添加https://github.com/ggrothendieck/sqldf/issues/36

于 2019-08-11T01:55:24.620 回答