这里有一个可能的解决方案。您可以使用创建每小时分组
format(df$time,'%H')
,因此我们只获得每个时段的小时数,然后我们可以简单地按此新列分组,并计算每组的平均值。
df = data.frame(time=seq(Sys.time(),Sys.time()+2*60*60*24,by='hour'),val=sample(seq(5),49,replace=T))
library(dplyr)
df %>% mutate(hour=format(df$time,'%H')) %>%
group_by(hour) %>%
summarize(mean_val = mean(val))
要首先对非零值进行子集划分,可以执行以下操作之一:
df = subset(df,val!=0)
或使用以下命令启动dplyr链:
df %>% filter(df$val!=0)
希望这有帮助!
df
如下所示:
time val
1 2018-01-31 12:43:33 4
2 2018-01-31 13:43:33 2
3 2018-01-31 14:43:33 2
4 2018-01-31 15:43:33 3
5 2018-01-31 16:43:33 3
6 2018-01-31 17:43:33 1
7 2018-01-31 18:43:33 2
8 2018-01-31 19:43:33 4
... ... ... ...
和输出:
# A tibble: 24 x 2
hour mean_val
<chr> <dbl>
1 00 3.50
2 01 3.50
3 02 4.00
4 03 2.50
5 04 3.00
6 05 2.00
.... ....
这假设您的
time
列已属于类
POSIXct
,否则首先必须使用
as.POSIXct(x,format='%Y-%m-%d %H:%M:%S')