我有一个数据框有一个“日期”字段。例如:"24-10-2015"
如何使用sqldf获取日期?
变量是日期格式。
当我使用sqldf,例如:select min(DATE), MAX (DATE) from table ...
输出的数字是类似16623
的数字。
试图FORMAT和CONVERT但他们不sqldf工作。
任何提示?
我有一个数据框有一个“日期”字段。例如:"24-10-2015"
如何使用sqldf获取日期?
变量是日期格式。
当我使用sqldf,例如:select min(DATE), MAX (DATE) from table ...
输出的数字是类似16623
的数字。
试图FORMAT和CONVERT但他们不sqldf工作。
任何提示?
指定数据框中每列的方法。假设'数据'是包含'日期'格式的列名'd'的数据框的名称。
尝试以下操作:
sqldf('select max(d) as MAX__Date,
min(d) as MIN__DATE
from data',
method = "name__class")
这应该工作。
这是我最喜欢的方法,因为没有对数据帧的数据进行更改。它工作! – saxo
我建议你使用as.POSIXct
,使您可以用SQLite
的date
功能工作改变你的日期POSIXct
:
使用一些随机数据:
#notice I keep the class of the date as POSIXct
#it really does not change anything
df <- data.frame(date = as.POSIXct('2015-01-01'))
#> df
# date
#1 2015-01-01
然后你就可以这样做:
#using the date function in SQLite you convert the nanoseconds
#produced by min(date) back to a date.
sqldf('select date(min(date), "unixepoch", "localtime") from df')
date(min(date), "unixepoch", "localtime")
1 2015-01-01
而你有你所需要的。有关于SQLite如何理解日期的更多信息here
另一种可能性是不要更改sqldf
函数,然后将存储的日期转换为数字。您可以使用as.Date()
此:
zoo::as.Date(16623)
[1] "2015-07-07"
正如LyzandeR提到的,你应该指定一个origin
,其中列明了第一次约会是什么。如果您使用的是zoo
软件包,默认值为“1970-01-01”,对于您的格式,它可能是正确的来源,但如果您不使用它(这意味着您起诉base
软件包的功能,那么您必须指定它。
as.Date(16623, origin = "1970-01-01")
[1] "2015-07-07"
但是,如果你不得不从Excel的约会,你应该改变的由来:
zoo::as.Date(42313)
[1] "2085-11-06"
as.Date(42313, origin = "1899-12-30") # for Windows, use "1904-01-01" for Mac
[1] "2015-11-05" # correct result
我居然发现,为什么不提供origin
是为我工作:我从包zoo
,其中“1970年-01-01" 是origin
默认选项:
base::as.Date(16623)
Error in as.Date.numeric(16623) : 'origin' must be supplied
zoo::as.Date(16623)
[1] "2015-07-07"
这里是代码,你可以看到zoo
指定defau用于功能as.Date.numeric
这不是用于base
包的情况下LT origin
:
base::as.Date.numeric
function (x, origin, ...)
{
if (missing(origin))
stop("'origin' must be supplied")
as.Date(origin, ...) + x
}
<bytecode: 0x17190e78>
<environment: namespace:base>
zoo::as.Date.numeric
function (x, origin, ...)
{
if (missing(origin))
origin <- "1970-01-01"
if (identical(origin, "0000-00-00"))
origin <- as.Date("0000-01-01", ...) - 1
as.Date(origin, ...) + x
}
<environment: namespace:zoo>
SO创建用于当前和未来的读者长期可用的信息。 问题应该包含所需的最小代码和数据,以便读者可以将其从问题中复制并粘贴到正在运行的R会话中,并查看发布者看到的内容。数据应该是问题的一部分,而不是其他地方,以确保它继续是可行的。使用R命令'dput(X)'以可重现的形式提供X.参见(1)http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example(2)http://stackoverflow.com/help/mcve(3)http: //stackoverflow.com/help/how-to-ask –