我正在使用sqldf
连接多个表,但是我在列上保留带有chron
包的times
类集时遇到问题。 我对sqldf
函数使用了method="name__class"
参数,并用类适当地命名了我的列,但我的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
提前感谢您的帮助。
sqldf
查找要转换为类X
的as.X
,但没有as.times
因此它假定times
不是类,x__times
是您想要使用的实际名称。
要解决此问题,请定义as.times
:
as.times <- times
方法="自动">
此外,如果您添加as.times
定义,那么,正如 @A. Suliman 在注释中指出的那样,在这种情况下您实际上不需要使用name__class
,因为默认method="auto"
已经自动将与输入列同名的任何输出列转换为该输入列的类。
相对湿度2
与SQLite不同,H2数据库确实支持日期和时间类,因此如果您使用H2数据库后端RH2,则无需定义as.times
。
library(RH2)
library(sqldf)
sqldf("select x, y from mytime")
如果你想回到SQLite,请确保RH2首先被分离,因为它会假设你想要它,如果它被加载,除非你根据?sqldf
专门指定SQLite。
新发行
这已作为新问题 https://github.com/ggrothendieck/sqldf/issues/36 添加