我試圖將我的數據框中的兩列轉換爲'好'日期&時間類,直到現在還沒有太多成功用它。我嘗試了各種類(timeDate,Date,timeSeries,POSIXct,POSIXlt),但沒有成功。也許我只是忽略了明顯的,因爲我已經嘗試了很多方法,我只是不知道什麼是什麼。我希望你們中的一些人能夠闡明我出錯的地方。如何查找最高(最新)和最低(最早)日期[R]
目標: 我想使用最早和最近的日期來計算兩個日期之間的差異。我使用head()和tail()來處理這個問題,但是因爲這些值在我的數據中並不是必需的,所以我需要另一種方法。 (我無法讓數據的排序工作,因爲它僅在日期當天對數據進行排序。)
第二個目標:我想將日期從日常格式(即8-12 -2010)到每週,每月和每年的水平(即「49 -2010」,「十二月-10」和「2010」)。這可以通過格式設置來完成(如「%d-%m-%y」)。這可以通過將data.frame轉換爲時間類來完成,而不是以正確的格式(8-12-2010 - > format(「%B-%y」) - >'December-10')轉換時間類。 ,然後將那個時間課程轉換爲每個月級別的因子?
對於這兩個目標,我需要以某種方式將日期框架轉換爲時間類,這是我遇到一些困難的地方。
我的數據框看起來是這樣的:
> tradesList[c(1,10,11,20),14:15] -> tmpTimes4
> tmpTimes4
EntryTime ExitTime
1 01-03-07 10-04-07
10 29-10-07 02-11-07
11 13-04-07 14-05-07
20 18-12-07 20-02-08
這裏是什麼,我已經試過了總結:
> class(tmpTimes4)
[1] "data.frame"
> as.Date(head(tmpTimes4$EntryTimes, n=1), format="%d-%m-%y")
Error in as.Date.default(head(tmpTimes4$EntryTimes, n = 1), format = "%d-%m-%y") :
do not know how to convert 'head(tmpTimes4$EntryTimes, n = 1)' to class "Date"
> as.timeDate(tmpTimes4, format="%d-%m-%y")
Error in as.timeDate(tmpTimes4, format = "%d-%m-%y") :
unused argument(s) (format = "%d-%m-%y")
> timeSeries(tmpTimes4, format="%d-%m-%y")
Error in midnightStandard2(charvec, format) :
'charvec' has non-NA entries of different number of characters
> tmpEntryTimes4 <- timeSeries(tmpTimes4$EntryTime, format="%d-%m-%y")
> tmpExitTimes4 <- timeSeries(tmpTimes4$ExitTime, format="%d-%m-%y")
> tmpTimes5 <- cbind(tmpEntryTimes4,tmpExitTimes4)
> colnames(tmpTimes5) <- c("Entry","Exit")
> tmpTimes5
Entry Exit
[1,] 01-03-07 10-04-07
[2,] 29-10-07 02-11-07
[3,] 13-04-07 14-05-07
[4,] 18-12-07 20-02-08
> class(tmpTimes5)
[1] "timeSeries"
attr(,"package")
[1] "timeSeries"
> as.timeDate(tmpTimes5, format="%d-%m-%y")
Error in as.timeDate(tmpTimes5, format = "%d-%m-%y") :
unused argument(s) (format = "%d-%m-%y")
> as.Date(tmpTimes5, format="%d-%m-%y")
Error in as.Date.default(tmpTimes5, format = "%d-%m-%y") :
do not know how to convert 'tmpTimes5' to class "Date"
> format.POSIXlt(tmpTimes5, format="%d-%m-%y", usetz=FALSE)
Error in format.POSIXlt(tmpTimes5, format = "%d-%m-%y", usetz = FALSE) :
wrong class
> as.POSIXlt(tmpTimes5, format="%d-%m-%y", usetz=FALSE)
Error in as.POSIXlt.default(tmpTimes5, format = "%d-%m-%y", usetz = FALSE) :
do not know how to convert 'tmpTimes5' to class "POSIXlt"
> as.POSIXct(tmpTimes5, format="%d-%m-%y", usetz=FALSE)
Error in as.POSIXlt.default(x, tz, ...) :
do not know how to convert 'x' to class "POSIXlt"
的TIMEDATE包有「範圍」的功能,但是,轉換爲日期類適用於單個實例,但出於某種原因不適用於數據框:
> as.Date(tmpTimes4[1,1], format="%d-%m-%y")
[1] "2007-03-01"
> as.Date(tmpTimes4, format="%d-%m-%y")
Error in as.Date.default(tmpTimes4, format = "%d-%m-%y") :
do not know how to convert 'tmpTimes4' to class "Date"
在這一點上,我幾乎相信這是不可能做到的,所以任何想法都會受到高度讚賞!
問候,
你可以使用`dput(tmpTimes4)`來提供你的代碼的確切數據集中使用。 – Marek 2010-12-08 11:38:22
@Marek:感謝您的回覆!我不知道dput,所以謝謝小費。 :) – Jura25 2010-12-08 13:40:32