使用 sqldf 保留时间 Class
Preserving times Class with sqldf
我正在使用 sqldf
连接多个表,但我无法在列上保留 times
class 集和 chron
包。我对 sqldf
函数使用了 method="name__class"
参数,并用 class 适当地命名了我的列,但是我的 times
变量在 selection 之后没有保留 sqldf
。
是否可以 select times
class 列并保留 class 或者我必须在 [= 之后重置 class 35=] select离子(这并不理想)。我提供了一个玩具示例,显示 sqldf
如何保留日期 classes,但不保留 times
class:
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
寻找 as.X
转换为 class X
但没有 as.times
所以它假设 times
不是class 和 x__times
是您要使用的实际名称。
要解决此问题,请定义 as.times
:
as.times <- times
方法="auto"
此外,如果您添加 as.times
定义,则作为 @A。 Suliman 在评论中指出,在这种情况下您实际上不需要使用 name__class
,因为默认值 method="auto"
已经自动将任何与输入列同名的输出列转换为该输入列的 class.
RH2
与 SQLite 不同,H2 数据库支持日期和时间 classes,因此如果您使用 H2 数据库后端 RH2,则无需定义 as.times
。
library(RH2)
library(sqldf)
sqldf("select x, y from mytime")
如果您想返回到 SQLite,请确保首先分离 RH2,因为除非您按照 ?sqldf
明确指定 SQLite,否则如果加载它,它将假设您需要它。
新一期
我正在使用 sqldf
连接多个表,但我无法在列上保留 times
class 集和 chron
包。我对 sqldf
函数使用了 method="name__class"
参数,并用 class 适当地命名了我的列,但是我的 times
变量在 selection 之后没有保留 sqldf
。
是否可以 select times
class 列并保留 class 或者我必须在 [= 之后重置 class 35=] select离子(这并不理想)。我提供了一个玩具示例,显示 sqldf
如何保留日期 classes,但不保留 times
class:
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
寻找 as.X
转换为 class X
但没有 as.times
所以它假设 times
不是class 和 x__times
是您要使用的实际名称。
要解决此问题,请定义 as.times
:
as.times <- times
方法="auto"
此外,如果您添加 as.times
定义,则作为 @A。 Suliman 在评论中指出,在这种情况下您实际上不需要使用 name__class
,因为默认值 method="auto"
已经自动将任何与输入列同名的输出列转换为该输入列的 class.
RH2
与 SQLite 不同,H2 数据库支持日期和时间 classes,因此如果您使用 H2 数据库后端 RH2,则无需定义 as.times
。
library(RH2)
library(sqldf)
sqldf("select x, y from mytime")
如果您想返回到 SQLite,请确保首先分离 RH2,因为除非您按照 ?sqldf
明确指定 SQLite,否则如果加载它,它将假设您需要它。