совокупный кадр данных к типичному году / неделе - PullRequest
0 голосов
/ 16 декабря 2018

, поэтому у меня есть большой фрейм данных со столбцом даты и времени класса POSIXct и еще один столбец с данными о цене числового класса.столбец даты и времени имеет значения вида «1998-12-07 02:00:00 AEST», которые представляют собой получасовые наблюдения за 20 лет.Примерный набор данных может быть сгенерирован с помощью следующего кода (измените 100 на любое количество необходимых наблюдений):

data.frame(date.time = seq.POSIXt(as.POSIXct("1998-12-07 02:00:00 AEST"), as.POSIXct(Sys.Date()+1), by = "30 min")[1:100], price = rnorm(100))

Я хочу посмотреть на типичный год и типичную неделю.поэтому для типичного года у меня есть следующий код:

mean.year <- aggregate(df$price, by = list(format(df$date.time, "%m-%d %H:%M")), mean)

, кажется, он дает мне то, что я хочу:

      Group.1        x
1 01-01 00:00 31.86200
2 01-01 00:30 34.20526
3 01-01 01:00 28.40105
4 01-01 01:30 26.01684
5 01-01 02:00 23.68895
6 01-01 02:30 23.70632

однако столбец "Group.1" имеет символ классаи я хотел бы, чтобы это было класса POSIXct.Как я могу это сделать?

для типичной недели у меня есть следующий код

mean.week <- aggregate(df$price, by = list(format(df$date.time, "%wday %H:%M")), mean)

вывод выглядит следующим образом

     Group.1        x
1 0day 00:00 33.05613
2 0day 00:30 30.92815
3 0day 01:00 29.26245
4 0day 01:30 29.47959
5 0day 02:00 29.18380
6 0day 02:30 25.99400

снова, столбец «Группа».1 "имеет характер класса, и я хотел бы POSIXct.Кроме того, я хотел бы иметь день недели как «понедельник», «вторник» и т. д. вместо 0day.как бы я это сделал?

1 Ответ

0 голосов
/ 16 декабря 2018

Преобразование даты и времени в символьную строку, которая может быть правильно преобразована обратно в POSIXct, а затем выполните следующее:

mean.year <- aggregate(df["price"], 
  by = list(time = as.POSIXct(format(df$date.time, "2000-%m-%d %H:%M"))), mean)
head(mean.year)
##                  time       price
## 1 2000-12-07 02:00:00 -0.56047565
## 2 2000-12-07 02:30:00 -0.23017749
## 3 2000-12-07 03:00:00  1.55870831
## 4 2000-12-07 03:30:00  0.07050839
## 5 2000-12-07 04:00:00  0.12928774
## 6 2000-12-07 04:30:00  1.71506499

Чтобы получить день недели, используйте %a или %A - см.?strptime для списка процентных кодов.

mean.week <- aggregate(df["price"], 
  by = list(time = format(df$date.time, "%a %H:%M")), mean)
head(mean.week)
##        time       price
## 1 Mon 02:00 -0.56047565
## 2 Mon 02:30 -0.23017749
## 3 Mon 03:00  1.55870831
## 4 Mon 03:30  0.07050839
## 5 Mon 04:00  0.12928774
## 6 Mon 04:30  1.71506499

Примечание

Ввод df в воспроизводимой форме - обратите внимание, что set.seed необходим, чтобы сделать его воспроизводимым:

set.seed(123)
df <- data.frame(date.time = seq.POSIXt(as.POSIXct("1998-12-07 02:00:00 AEST"),
  as.POSIXct(Sys.Date()+1), by = "30 min")[1:100], price = rnorm(100))
...