我有一個數據框有一個「日期」字段。例如:"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 –