(这是我在Stackoverflow上的第一篇文章,所以请告诉我我在这个问题中是否犯了什么基本错误)
嗨,
我有一个每小时测量的数据,空气质量在数天的R,我想计算平均空气质量在特定的时间周期。
这是我的可复制数据的子集。它是xts格式的。
# Make a structure of data
dput(Air_sample[1:6,1:1])
# Create a data from the structure above.
Air <- structure(
c(2.6, 2, 2.2, 2.2, 1.6, 1.2),
class = c("xts", "zoo"),
index = structure(
c(
1078959600,
1078963200,
1079046000,
1079049600,
1079132400,
1079136000
),
tzone = "",
tclass = c("POSIXct",
"POSIXt")
),
.Dim = c(6L, 1L),
.Dimnames = list(NULL, c("True.CO")))
> Air
True.CO
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
我想计算特定时间的平均CO。下午6点)从多天开始。结果如下所示。
Air_average <- data.frame("Time" = c("18:00","19:00"), "Average CO" = c(2.1333,1.8))
> Air_average
Time Average.CO
1 18:00 2.1333
2 19:00 1.8000
我通过谷歌尝试了不同的功能,比如"period.apply“、”子集“、”窗口“等等,但似乎都没有用。
有办法这样做吗?
谢谢。
发布于 2021-05-13 16:27:04
您可以使用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
因为我的时区,时间和你的不一样,但是代码是一样的。
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
https://stackoverflow.com/questions/67521209
复制相似问题