我正在尝试使用sqldf添加日期,我知道它应该很简单,但我无法弄清楚我的日期格式有什么问题。使用:
sqldf("select date(model_date, '+1 day') from lapse_test")
给出答案,如' -4666-01-23'
model_date采用日期格式,看起来像2015-01-01
我之前使用
从字符串(&#39; 12/1/2015&#39;)制作了它们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")
我猜这是问题所在?有什么想法吗?
答案 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的回答可能更好,但我认为了解潜在的工作方式可能会很有趣。