2014-10-08 3 views
0

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) 

추측이

TIA

+2

당신이'as.character'을 시도 했습니까? 예 : 'df [as.character (df $ dt) == "2014-08-17",]' –

+0

으악. 그게 분명한 해결책이 될 것 같습니다. – pssguy

답변

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

나는 똑같은 것을 발견했지만, 당신과는 달리, 이것이 버그라고 생각합니다. –

+0

@BondedDust 적어도 적절하게 문서화되지 않았습니다. 버그 보고서를 보내주십시오. – Roland

+0

루트 문제는 두 번째 인수가 정수인지 확인하지 않고 구조체 (unclass (e1) + unclass (e2), 클래스 = "Date")'를 반환하는'+ .Date'에 있습니다. – Roland

관련 문제