【发布时间】:2016-10-22 06:29:31
【问题描述】:
我正在使用具有日期的在线数据集。我正在尝试使用 R (sqldf) 基于日期执行操作,但它不起作用。我可以使用其他包解决我的问题,但我会通过使用 SQL 查询限制我的分析来解决这个问题。
我将首先使用一个简单的示例和一个本地数据集来展示我想要做什么:
library(sqldf)
Name <- c('A', 'B', 'C', 'D', 'E')
DOB <- c('1989-08-19','1993-07-14', '1982-12-16', '1934-11-04', '2010-02-19')
dt1 <- data.frame(Name, DOB)
dt1
str(dt1)
使用这个我可以使用 sqldf 计算年龄并得到正确的结果:
sqldf("select name, current_date, DOB from dt1")
sqldf("select name, current_date, DOB, current_date-DOB as AGE from dt1")
sqldf("select name, current_date, DOB, current_date-DOB as AGE from dt1
where DOB >'1990-01-01'")
我在 Google 驱动器中创建了完全相同的数据集,我正在尝试复制上述脚本。
library(gsheet)
dt2 <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1E3lFgsee9FZL0NERAyDwRYvYqpjsMJ-9aLzj9rJcBc4/edit?usp=sharing")
dt2
str(dt2)
sqldf("select name, current_date, DOB from dt2")
sqldf("select name, current_date, DOB, current_date-DOB as AGE from dt2")
sqldf("select name, current_date, DOB, current_date-DOB as AGE from dt2
where DOB >'1990-01-01'")
它以千年为单位返回年龄!
试图改变日期格式
dt2 <- gsheet2tbl("Same as Above")
str(dt2)
dt2
dt2$DOB <- as.Date(dt$DOB, "%y/%m/%d")
str(dt2)
dt2
由于 DOB 已变为 NA,我被卡住了,所以我尝试了另一种日期格式
dt2 <- gsheet2tbl("Same as Above")
str(dt2)
dt2
dt2$DOB <- as.Date(dt2$DOB, "%y-%m-%d")
str(dt2)
dt2
同样的问题,所以我尝试转换为因子
dt2 <- gsheet2tbl("Same as above")
str(dt2)
dt2
dt2$DOB <- as.factor(dt2$DOB)
str(dt2)
dt2
sqldf("select name, current_date, DOB from dt2")
sqldf("select name, current_date, DOB, current_date-DOB as AGE from dt2")
sqldf("select name, current_date, DOB, current_date-DOB as AGE from dt2
where DOB >'1990-01-01'")
回到第一方,年龄以千年为单位! 任何有关如何使用 SQL 查询解决此问题的建议将不胜感激。 谢谢。
PS 当我下载数据并将其导入为 csv 时,我遇到了同样的问题。
【问题讨论】: