Я пытаюсь преобразовать два столбца в моем ядре данных в "хороший класс даты и времени", и до сих пор не имел большого успеха с ним. Ive пробовал различные классы (timeDate, Date, timeSeries, POSIXct, POSIXlt), но безуспешно. Возможно, я просто упускаю из виду очевидное и потому, что Ive пытался так много подходов, я просто не знаю, что больше. Я надеюсь, что некоторые из вас могут пролить свет на то, где я ошибаюсь.
Цель: Я хочу рассчитать разницу между двумя датами, используя самую раннюю и последнюю дату. Я получил эту работу с head() и tail(), но поскольку эти значения необходимы для самой ранней и последней даты в моих данных, мне нужен другой способ. (Я не могу сортировать данные для работы, потому что он сортирует данные только в день даты.)
Вторая цель. Я хочу конвертировать даты из ежедневного формата (т.е. 8-12-2010) в еженедельные, ежемесячные и годовые уровни (например, "49 -2010", "декабрь-10" ', а всего лишь' 2010 '). Это можно сделать с настройками формата (например, "% d-% m-% y" ). Может ли это быть сделано с преобразованием data.frame в класс времени, а затем преобразование timeclass в правильном формате (8-12-2010 → format ( "% B-% y" ) → 'декабрь-10'), а затем преобразование этого временного класса в фактор с уровнями за каждый месяц?
Для обеих целей мне нужно каким-то образом преобразовать фреймворк даты в класс времени, и именно здесь я столкнулся с некоторыми трудностями.
Мой dataframe выглядит так:
> 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"
В этот момент я почти верю, что это невозможно сделать, поэтому любые мысли будут высоко оценены!
Привет,