在R中:如何按天根据某列中的最大值聚合整行?
以下是我的数据集示例:在R中:如何按天根据某列中的最大值聚合整行?,r,R,以下是我的数据集示例: date O3 NOX SO2 01/01/1994 06:00 7 14 29 01/01/1994 07:00 5 18 30 01/01/1994 08:00 3 18 29 01/01/1994 09:00 6 24 35 01/01/1994 10:00 20 42 52 01/02/1994 06:00 19 7 11 01/02/1994 07:00
date O3 NOX SO2
01/01/1994 06:00 7 14 29
01/01/1994 07:00 5 18 30
01/01/1994 08:00 3 18 29
01/01/1994 09:00 6 24 35
01/01/1994 10:00 20 42 52
01/02/1994 06:00 19 7 11
01/02/1994 07:00 19 6 16
01/02/1994 08:00 42 10 4
01/02/1994 09:00 25 17 26
01/02/1994 10:00 36 29 13
01/03/1994 06:00 10 1 6
01/03/1994 07:00 14 2 5
01/03/1994 08:00 24 4 4
01/03/1994 09:00 57 11 6
01/03/1994 10:00 39 34 11
使用R,我要做的是根据每天给定列中的最大值聚合或子集整行,在本例中,选择每天包含最大值的整行
我的代码只汇总O3列和日期,但删除记录的小时
加总:
agg.df%
分组单位(日期)%>%
总结(O3=最大值(var))
我想得到这样的东西:
date O3 NOX SO2
01/01/1994 10:00 20 42 52
02/01/1994 08:00 42 10 4
03/01/1994 09:00 57 11 6
...
其中,最终子集包括整行,最大值为O3/天
非常感谢。注意:这将保留
O3
等于当天最大值的所有行。如果每行只需要1个,可以使用slice
或top\n
来完成
library(tidyverse)
dat %>%
group_by(day = lubridate::date(date)) %>%
filter(O3 == max(O3)) %>%
ungroup %>%
select(date, O3, NOX, SO2, -day)
# A tibble: 3 x 4
date O3 NOX SO2
<dttm> <int> <int> <int>
1 1994-01-01 10:00:00 20 42 52
2 1994-02-01 08:00:00 42 10 4
3 1994-03-01 09:00:00 57 11 6
库(tidyverse)
dat%>%
分组人(日期=润滑油::日期(日期))%>%
过滤器(O3==最大值(O3))%>%
解组%>%
选择(日期、O3、NOX、SO2、-天)
#一个tibble:3x4
日期O3 NOX SO2
1 1994-01-01 10:00:00 20 42 52
2 1994-02-01 08:00:00 42 10 4
3 1994-03-01 09:00:00 57 11 6
数据
dat考虑使用ave
计算最大O3,然后相应细分:
dat$Max_O3 <- with(dat, ave(O3, as.Date(date), FUN=max))
subset(dat, O3 == Max_O3)
# O3 NOX SO2 date Max_O3
# 5 20 42 52 1994-01-01 10:00:00 20
# 8 42 10 4 1994-02-01 08:00:00 42
# 14 57 11 6 1994-03-01 09:00:00 57
dat$Max\uO3很高兴听到!别忘了说话的方式!
dat$Max_O3 <- with(dat, ave(O3, as.Date(date), FUN=max))
subset(dat, O3 == Max_O3)
# O3 NOX SO2 date Max_O3
# 5 20 42 52 1994-01-01 10:00:00 20
# 8 42 10 4 1994-02-01 08:00:00 42
# 14 57 11 6 1994-03-01 09:00:00 57