Гистограмма различий дат - сгруппирована - PullRequest
2 голосов
/ 13 сентября 2011

На днях я задал вопрос о том, как получить гистограмму разницы дат.Я хотел бы сделать то же самое, но для групп и с сюжетом коробки, используя bwplot решетки.По сути, нужно 1 изображение с 5 коробочными диаграммами для каждого из 5 различных источников, которые у меня есть (я показал 2 ниже в примере) - что-то вроде этого image.

Я потратил довольно многовремя пытаюсь это выяснить, но не могу понять.

Ближайший, который я могу найти

df <- read.csv("~/dates.csv", header = TRUE, sep = ",", quote = "\"")
a <- aggregate(as.POSIXct(as.character(df$REQUEST_DATE), format="%m/%d/%Y %H:%M:%S"), list(SOURCE=df$SOURCE), diff) # not sure if this is right (and I need -diff, but can't do that)
# now what?  I seem to know how to access a$SOURCE, but don't know how to look at the data associated with a$SOURCE.

Данные (~ / date.csv):

"SOURCE","REQUEST_DATE"
"A","09/11/2011 09:28:48"
"A","09/11/2011 09:21:15"
"A","09/11/2011 09:15:42"
"A","09/11/2011 09:12:18"
"D","09/13/2011 09:06:53"
"D","09/13/2011 09:06:18"
"D","09/13/2011 08:56:55"
"D","09/13/2011 08:56:18"
"D","09/13/2011 08:55:43"
"D","09/13/2011 08:39:07"

1 Ответ

3 голосов
/ 13 сентября 2011

Вот решение, использующее пакет plyr для анализа данных и пакет ggplot2 для графика:

Считайте данные. Обратите внимание на использование stringsAsFactors=FALSE - это сэкономит массу хлопот, конвертируя в as.character позже:

df <- read.csv(textConnection('
"SOURCE","REQUEST_DATE"
"A","09/11/2011 09:28:48"
"A","09/11/2011 09:21:15"
"A","09/11/2011 09:15:42"
"A","09/11/2011 09:12:18"
"D","09/13/2011 09:06:53"
"D","09/13/2011 09:06:18"
"D","09/13/2011 08:56:55"
"D","09/13/2011 08:56:18"
"D","09/13/2011 08:55:43"
"D","09/13/2011 08:39:07"
'), stringsAsFactors=FALSE)

Конвертировать в формат даты POSIX:

df$REQUEST_DATE <- as.POSIXct(df$REQUEST_DATE, format="%m/%d/%Y %H:%M:%S")

Загрузка plyr и использование ddply для a) группировки по SOURCE, b) вычисления difftime, c) группировки результатов в data.frame, все за один шаг:

library(plyr)
df_diff <- ddply(df, .(SOURCE), summarize, TIME_DIFF=-unclass(diff(REQUEST_DATE)))
df_diff
  SOURCE TIME_DIFF
1      A      7.55
2      A      5.55
3      A      3.40
4      D     35.00
5      D    563.00
6      D     37.00
7      D     35.00
8      D    996.00

Загрузка ggplot2 и сюжет. Сюжет выглядит немного мусором - это потому, что набор данных образца крошечный. Это будет работать лучше с большими наборами данных, то есть вы получите четкое разделение между медианой, диапазоном и выбросами.

library(ggplot2)
ggplot(df_diff, aes(y=TIME_DIFF, x=SOURCE)) + geom_boxplot()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...