首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据框架聚合到典型的年份/周

将数据框架聚合到典型的年份/周
EN

Stack Overflow用户
提问于 2018-12-16 08:01:54
回答 1查看 74关注 0票数 0

因此,我有一个大的数据框架,其中一个是POSIXct类的日期时间列,另一个是包含类数字价格数据的另一列。日期时间列的值为"1998-12-07 02:00 AEST“,为20年半小时的观测值。可以使用以下代码生成示例数据集(将100更改为所需的观察次数):

代码语言:javascript
复制
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))

我想看看典型的一年和典型的一周。因此,对于典型的年份,我有以下代码:

代码语言:javascript
复制
mean.year <- aggregate(df$price, by = list(format(df$date.time, "%m-%d %H:%M")), mean)

它似乎给了我我想要的:

代码语言:javascript
复制
      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。我该怎么做?

对于典型的一周,我有以下代码

代码语言:javascript
复制
mean.week <- aggregate(df$price, by = list(format(df$date.time, "%wday %H:%M")), mean)

输出如下

代码语言:javascript
复制
     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“具有类的性质,我想要POSIXct。另外,我想把一周中的一天改为“星期一”、“星期二”等,而不是零日。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-16 11:38:01

将日期时间转换为可以有效地转换回POSIXct的字符串,然后这样做:

代码语言:javascript
复制
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的百分比代码列表。

代码语言:javascript
复制
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才能使其可复制:

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53800461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档