当我尝试将日期格式的值从R studio插入SQLite数据库时,出现了问题。
值得注意的是,我将dbf文件加载到R studio中,然后将数据从dbf文件中整理到SQLite数据库中。
这是我使用的代码。有两个循环读取指定工作目录中的所有dbf文件。
library(sqldf)
library(DBI)
library(foreign)
library("RSQLite")
setwd("F:~/Data")
con <- dbConnect(RSQLite::SQLite(), dbname = "bbbb.db")
for(path in c("F:~/data1"
"F:~/data2")){
setwd(path)
ldf <- list() # creates a list
listdbf <- dir(pattern = "*.DBF")
for (k in 1:length(listdbf)){
ldf[[k]] <- read.dbf(listdbf[k])
}
df1 <- ldf[[1]]
df2 <- ldf[[2]]
data1 <- sqldf("select a.date, a.REGN as regn,
sum(case when b.C1='000' then b.C3 else 0 end) as tot_cap,
from df1 a
inner join df2 b on (a.regn = b.regn)
group by a.regn, a.dt
order by a.regn")
dbWriteTable(con, name="capital", value=data1, append= TRUE)
}
因此,SQLite数据库中日期变量的格式为“ 18140”,而不是“ 2019-10-01”。
我试图通过代码在R studio中的df1表中更改日期格式
df1$date <- as.Date(as.POSIXct(df1$DT, format='%d.%m.YY'))
而且这只是我尝试更改日期格式的许多其他版本中的一个代码。
但是我失败了。
是否有处理此问题的想法?
提前感谢。
SQLite可以存储的类型数量有限,并且不包含日期类型。因此,当您将R Date对象存储到数据库中时,您将获得基础数值“从1970-01-01开始的天数”。
当您从数据库中读取值时,您需要告诉R它们实际上是日期。使用代码
as.Date(18140, origin = "1970-01-01")
将数值转换回日期。 (如果使用zoo
包,则不需要origin
参数,但是如果要从as.Date
中获取base
,则需要。)
格式是另一个问题:显示值或从字符串转换时使用它。从内部数值开始时,无需指定它。