R:sqldf中的日期函数给出了不寻常的答案(错误的日期格式?)

时间:2016-08-31 04:56:12

标签: r date sqldf

我正在尝试使用sqldf添加日期,我知道它应该很简单,但我无法弄清楚我的日期格式有什么问题。使用:

sqldf("select date(model_date, '+1 day') from lapse_test")

给出答案,如' -4666-01-23'

model_date采用日期格式,看起来像2015-01-01

我之前使用

从字符串(' 12/1/2015')制作了它们
lapse_test$model_date <- as.Date(lapse_test$date1,format = "%m/%d/%Y") or
lapse_test$model_date <- as.POSIXCT(lapse_test$date1,format = "%m/%d/%Y")

我猜这是问题所在?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

将字符变量传递给date()函数似乎有效:

df <- data.frame(a=as.Date("2010-10-01"))
df$b <- as.character(df$a)

sqldf("select date(a) from df")
#       date(a)
# 1 -4672-08-24

sqldf("select date(b) from df")
#      date(b)
# 1 2010-10-01

sqldf("select date(b, '+1 day') from df")
#   date(b, '+1 day')
# 1        2010-10-02

请注意,您可以直接对R中的Date对象执行(某些)算术,而不需要SQL:

df$a <- df$a + 1
df
#            a          b
# 1 2010-10-02 2010-10-01

答案 1 :(得分:1)

SQLite日期函数将日期视为自公元4714年11月24日以来的天数,这意味着R中HttpProtocolFilter的示例日期的16770的整数存储将在4667BC的某处返回一个古老的日期。

您可以确定2015-12-01的R原点与SQLite原点之间的差异为1970-01-01天。这意味着,如果您愿意,可以考虑这个常数:

2440588

@ HongOoi的回答可能更好,但我认为了解潜在的工作方式可能会很有趣。