繁体   English   中英

无法过滤从数字转换的日期字段

[英]Cannot filter on date field converted from numeric

使用R,当我查询sqlite数据库时,它返回一个日期字段作为双精度型。

当我将其转换为日期字段时,看起来不错,但无法对其进行过滤。 这是一个玩具的例子

df <- data.frame(dbl = c(1408258800, 1409382000, 1324108800))
df$dt <- as.Date(df$dbl/(60*60*24), origin= '1970-01-01')

str(df)
# 'data.frame': 3 obs. of  2 variables:
#  $ dbl: num  1.41e+09 1.41e+09 1.32e+09
# $ dt : Date, format: "2014-08-17" "2014-08-30" "2011-12-17"

df[df$dbl==1408258800,]
#         dbl         dt
#1 1408258800 2014-08-17


df[df$dt=="2014-08-17",]
#[1] dbl dt 
#<0 rows> (or 0-length row.names)

   OR

df[df$dt==as.Date("2014-08-17"),]
#[1] dbl dt 
#<0 rows> (or 0-length row.names)

猜猜我在获取初始结果作为日期字段或后续处理时缺少一些非常基本的东西

TIA

as.Date期望从原点as.Date的天数作为输入。 但是,您传递给它十进制数。 所以:

as.numeric(df$dt[1])
#[1] 16299.29
as.numeric(as.Date("2014-08-17"))
#[1] 16299

这些并不完全相同。 我认为as.Date.numeric应该以不同的方式处理此问题或发出警告,但这并不是一个错误。

改用整数除法:

df$dt <- as.Date(df$dbl %/% (60*60*24), origin= '1970-01-01')

df[df$dt==as.Date("2014-08-17"),]
#         dbl         dt
#1 1408258800 2014-08-17

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM