2013-12-13 4 views
1

RSQLite를 사용하여 SQLite에서 R 데이터 프레임의 날짜를 문자열로 저장하는 방법이 있습니까? 현재 날짜 열은 정수로 저장됩니다. SQLite에 쓰기 전에 모든 날짜를 문자열로 변환 할 수는 있지만 데이터 프레임이 인수 중 하나 인 함수에서 SQLite로 작성해야하므로 변환을 피하는 것이 좋습니다.RSQLite - 날짜 열을 SQLite에 문자로 저장

library('RSQLite') 

df <- data.frame(
     x=1:3, 
     y=as.Date(c('2011-01-01','2011-03-03','2011-12-31')) 
    ) 

df 

# Create connection and temporary database 
sqlite <- dbDriver("SQLite") 
tmpdb <- dbConnect(sqlite,"__this_is_temporary_db__.db")   

# Write data  
dbWriteTable(tmpdb,'df',df) 

# We get integers from date 
dbGetQuery(tmpdb,'select * from df') 

dbDisconnect(tmpdb)  

# file.remove('__this_is_temporary_db__.db') 
+1

https://github.com/rstats-db/RSQLite/issues/17 – hadley

답변

3

문자를 강요해야합니다. 이 같은 것을 사용하여 모든 data.frame 날짜 열을 위해 그것을 할 수 있습니다

ll <- lapply(df,function(x) 
    if(inherits (x,c('POSIXct','Date')) 
     as.character(x) 
    else x)) 
do.call(rbind.data.frame,ll) 
+0

...이 주된 이유가 sqlite가되는 참조 네이티브 [날짜 유형] (http://www.sqlite.org/datatype3.html)이 없습니다. 그리고 R은 내부적으로 날짜를 정수로 저장합니다. 그래서 캐릭터를 원한다면 sqlite로 보내야합니다. – joran

+2

그리고 텍스트 필드를 강제 할 때. dbSendQuery (tmpdb, "CREATE TABLE df (x INTEGER, y TEXT)"); dbSendPreparedQuery (tmpdb, "df 값 (?,?)에 삽입", bind.data = df)'그것은 실제와 비슷한 모양의 텍스트로 변환됩니다. –

+0

@TomasGreif가 수정되었습니다. – agstudy