我试图将我的数据框中的两列转换为'好'日期&时间类,直到现在还没有太多成功用它。我尝试了各种类(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