将数据框聚合到典型 year/week
aggregate data frame to typical year/week
所以我有一个大型数据框,日期时间列为 class POSIXct,另一列价格数据为 class 数字。日期时间列具有“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" 列是 class 字符,我希望它是 class 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
同样,第 "Group.1" 列是 class 个字符,我想要 POSIXct。另外,我希望将星期几设为 "Monday"、"Tuesday" 等而不是 0day。我该怎么做?
将日期时间转换为可以有效转换回 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))
所以我有一个大型数据框,日期时间列为 class POSIXct,另一列价格数据为 class 数字。日期时间列具有“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" 列是 class 字符,我希望它是 class 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
同样,第 "Group.1" 列是 class 个字符,我想要 POSIXct。另外,我希望将星期几设为 "Monday"、"Tuesday" 等而不是 0day。我该怎么做?
将日期时间转换为可以有效转换回 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))