【发布时间】:2011-05-22 03:09:53
【问题描述】:
我正在尝试将我的数据框中的两列转换为“良好”的日期和时间类,但到目前为止还没有取得太大的成功。我尝试了各种课程(timeDate、Date、timeSeries、POSIXct、POSIXlt)但没有成功。也许我只是忽略了显而易见的事情,因为我尝试了很多方法,我只是不知道什么是什么了。我希望你们中的一些人能阐明我哪里出错了。
目标:
我想使用最早和最晚日期计算两个日期之间的差异。我使用head() 和tail() 进行了这项工作,但因为这些值不是我数据中最早和最晚日期的必要条件,所以我需要另一种方法。 (我无法对数据进行排序,因为它仅在日期当天对数据进行排序。)
第二个目标:我想将日期从每日格式(即 8-12-2010)转换为每周、每月和每年的级别(即 '49-2010'、'december-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 包有一个“范围”功能,但是,转换为 Date 类适用于单个实例,但由于某种原因不适用于数据框:
> 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:感谢您的回复!我不知道 dput,所以谢谢你的提示。 :)