2014-10-08 61 views
0

使用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

+2

你嘗試'as.character'?例如'df [as.character(df $ dt)==「2014-08-17」,]' – 2014-10-08 17:30:56

+0

哎呀。看起來像這可能是明顯的解決方案 – pssguy 2014-10-08 17:46:56

回答

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 
+0

我找到了同樣的東西,但不像你,我認爲這是一個錯誤。 – 2014-10-08 17:46:13

+0

@BonddedDust至少沒有充分記錄。隨意提交錯誤報告。 – Roland 2014-10-08 17:47:25

+0

根本問題在'+ .Date'中,它返回'structure(unclass(e1)+ unclass(e2),class =「Date」)'而不檢查第二個參數是否是整數。 – Roland 2014-10-08 18:02:15

相關問題