Не удается отфильтровать поле даты, преобразованное из числового

Используя R, когда я запрашиваю базу данных sqlite, он возвращает поле даты как double.

Когда я конвертирую это в поле даты, оно выглядит нормально, но я не могу фильтровать его. Вот игрушечный пример

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)

Думаю, я упускаю что-то довольно простое либо при получении начального результата в виде поля даты, либо при последующей обработке

ТИА

1 ответ

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
Другие вопросы по тегам