Как создать только временную часть временной метки, включая дату?
Итак, у меня есть набор временных меток вроде этого:
datetime<-c("2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00", "2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00")
Я хочу сделать гистограмму только раз. То, что я сделал, это разделить столбец в пространстве, чтобы получить только время, а затем преобразовать обратно в объект POSIXct, чтобы qplot мог его построить:
library(ggplot2, stringr)
qplot(as.POSIXct(strptime((str_split_fixed(as.character(time), " ", 2)[,2]), "%H:%M:%S")))
Однако вывод as.POSIXct(strptime((str_split_fixed(as.character(datetime), " ", 2)[,2]), "%H:%M:%S"))
равен
"2011-10-04 03:33:00 PDT" "2011-10-04 13:41:00 PDT" "2011-10-04 16:14:00 PDT" "2011-10-04 11:01:00 PDT" "2011-10-04 06:35:00 PDT" "2011-10-04 12:48:00 PDT"
qplot показывает то, что я хочу, но это кажется запутанным взломом для меня. Неужели есть лучший способ сделать это? Я мог бы преобразовать в эпоху и заговорить, но я пытался избежать необходимости делать это как дополнительный шаг.
Более большой вопрос: "Как я могу управлять выходом strptime?"
Ответы
Ответ 1
Как насчет этого подхода?
require("ggplot2")
dtstring <- c(
"2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00",
"2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00"
)
dtPOSIXct <- as.POSIXct(dtstring)
# extract time of 'date+time' (POSIXct) in hours as numeric
dtTime <- as.numeric(dtPOSIXct - trunc(dtPOSIXct, "days"))
p <- qplot(dtTime) + xlab("Time slot") + scale_x_datetime(format = "%S:00")
print(p)
Расчет, dtPOSIXct - trunc(dtPOSIXct, "days")
, извлекает время для объектов класса POSIXct в часах.
![plot(p)]()
Для ggplot2-0.9.1
:
require("ggplot2")
require("scales")
dtstring <- c(
"2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00",
"2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00"
)
dtPOSIXct <- as.POSIXct(dtstring)
# extract time of 'date+time' (POSIXct) in hours as numeric
dtTime <- as.numeric(dtPOSIXct - trunc(dtPOSIXct, "days"))
p <- qplot(dtTime) + xlab("Time slot") +
scale_x_datetime(labels = date_format("%S:00"))
print(p)
Для ggplot2-0.9.3.1
:
require("ggplot2")
require("scales")
dtstring <- c(
"2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00",
"2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00"
)
dtPOSIXct <- as.POSIXct(dtstring)
# extract time of 'date+time' (POSIXct) in hours as numeric
dtTime <- as.numeric(dtPOSIXct - trunc(dtPOSIXct, "days"))
class(dtTime) <- "POSIXct"
p <- qplot(dtTime) + xlab("Time slot") +
scale_x_datetime(labels = date_format("%S:00"))
print(p)
Ответ 2
Просто используйте базовые инструменты, как они были предназначены:
dtstring <- c("2011-09-28 03:33:00", "2011-08-24 13:41:00", "2011-09-19 16:14:00", "2011-08-18 11:01:00", "2011-09-17 06:35:00", "2011-08-15 12:48:00")
datetime <- as.POSIXct(dtstring)
library(ggplot2)
qplot(datetime)
Формат ваших строк является значением по умолчанию для синтаксического анализа с помощью as.POSIXct
, см. ?strptime
для получения дополнительной информации или если у вас есть что-то другое, кроме этого формата.
Если вы хотите получить определенный формат строки из ваших значений даты, используйте format
, как в
format(datetime, "%d-%b")
[1] "28-Sep" "24-Aug" "19-Sep" "18-Aug" "17-Sep" "15-Aug"
Снова, см. ?strptime
для деталей. Если вы действительно хотите сбросить значения времени, вы можете использовать класс Date
. Просто имейте в виду, что даты или даты необходимы для их полной структуры, любое другое представление - это только форматированный текст.
qplot (as.Date(DateTime))