在R中计算特定时间内各天的平均数据 更新(2021/5/1311:55):数据不可复制。谢谢@G.Grothendieck给我的评论

在R中计算特定时间内各天的平均数据 更新(2021/5/1311:55):数据不可复制。谢谢@G.Grothendieck给我的评论,r,time-series,average,xts,R,Time Series,Average,Xts,(这是我在Stackoverflow的第一篇文章,所以如果我在这个问题上犯了一些基本错误,请告诉我) 嗨 我有一个R中多天的每小时空气质量测量数据,我想计算特定时间段的平均空气质量 这是我的可复制数据的子集。它是xts格式的 #创建数据结构 dput(空气样品[1:6,1:1]) #从上面的结构创建一个数据。 空气 特鲁尔公司 2004-03-10 18:00:00 2.6 2004-03-10 19:00:00 2.0 2004-03-11 18:00:00 2.2 2

(这是我在Stackoverflow的第一篇文章,所以如果我在这个问题上犯了一些基本错误,请告诉我)

我有一个R中多天的每小时空气质量测量数据,我想计算特定时间段的平均空气质量

这是我的可复制数据的子集。它是xts格式的

#创建数据结构
dput(空气样品[1:6,1:1])
#从上面的结构创建一个数据。
空气
特鲁尔公司
2004-03-10 18:00:00     2.6
2004-03-10 19:00:00     2.0
2004-03-11 18:00:00     2.2
2004-03-11 19:00:00     2.2
2004-03-12 18:00:00     1.6
2004-03-12 19:00:00     1.2
我想计算几天中特定时间(例如下午6点)的平均CO。 因此,结果如下所示

Air\u average Air\u average
时间平均公司
1 18:00     2.1333
2 19:00     1.8000
我通过谷歌搜索尝试了不同的功能,如“period.apply”、“subset”、“window”等,但似乎都不起作用

有没有办法做到这一点


谢谢。

您可以使用类似于
dplyr
的方法来执行分组操作,也可以使用
lubridate
来处理日期
lubridate
具有仅返回小时数的
hour
功能。 我首先将数据转换为数据帧:

library(lubridate)
library(dplyr)
library(xts)

Air <- data.frame(Air) %>% 
  add_rownames(var = "time")

  time                True.CO
  <chr>                 <dbl>
1 2004-03-11 00:00:00     2.6
2 2004-03-11 01:00:00     2  
3 2004-03-12 00:00:00     2.2
4 2004-03-12 01:00:00     2.2
5 2004-03-13 00:00:00     1.6
6 2004-03-13 01:00:00     1.2
库(lubridate)
图书馆(dplyr)
图书馆(xts)
空气%
添加行名(var=“time”)
时代真公司
1 2004-03-11 00:00:00     2.6
2 2004-03-11 01:00:00     2  
3 2004-03-12 00:00:00     2.2
4 2004-03-12 01:00:00     2.2
5 2004-03-13 00:00:00     1.6
6 2004-03-13 01:00:00     1.2
因为我的时区,时间和你的不一样,但是代码是一样的

Air %>%
  group_by(hour(time))%>%
  summarise(mean(True.CO))

# A tibble: 2 x 2
  `hour(time)` `mean(True.CO)`
         <int>           <dbl>
1            0            2.13
2            1            1.8 
Air%>%
分组依据(小时(时间))%>%
总结(平均值(True.CO))
#一个tibble:2x2
`小时(time)`mean(True.CO)`
1            0            2.13
2            1            1.8 

请显示示例的确切输入和相应的输出。不要使用圆点。还应按照标签页顶部的要求使用dput,以可复制的形式显示数据,并确保输出与输入完全一致。你想要什么也一点也不清楚。问题是您想要6:00的平均值,但输出显示其他时间。@G.Grothendieck感谢您的评论。我正在阅读关于如何使用dput在这里正确发布的帖子和视频。我会很快更新这篇文章。大概
aggregate
会完成这项工作。但是我记不起语法了。@Jeremy谢谢你。我试过聚合,不知怎么找到了一种方法。非常感谢@denis!成功了,没有pb。有很多选项可以执行分组操作:
tapply
在base R中,您还可以查看
数据表
,它非常强大。但是到目前为止,
dplyr
是使用最多的