我每天都在处理通过一个县的多台监视器收集的数据。我想在每个监控日中保留一个县中所有监控器的最大集中度。首先,我需要确定在同一天报告了同一县的值的行,然后删除报告值最低的行。这是一个示例数据框(p2015):
County.Code Site.Num Date.Local Max.Value
3 3 1/1/2015 30
3 3 1/1/2015 45
3 3 1/1/2015 16
4 5 1/1/2015 32
4 5 1/1/2015 18
5 6 1/1/2015 8
5 7 1/1/2015 11
我想留下这个:
County.Code Site.Num Date.Local Max.Value
3 3 1/1/2015 45
4 5 1/1/2015 32
5 7 1/1/2015 11
我认为也许使用If语句可以解决问题,但它不起作用。我已经尝试过以下方法,但是没有运气:
if (p2015$County.Code == p2015$Date.Local){
p2015[ , .SD[which.min(Max.Value)]]
}
我已经搜索了此信息,但只能根据两个条件而不是三个条件来查找用于删除行的信息。另外,我只是很困惑如何提取最小值。任何帮助表示赞赏。
答案 0 :(得分:2)
将df
按County.Code
和Date.Local
分组,并仅保留Max.Value
等于max(Max.Value)
的行。
# load necessary packages ----
library(tidyverse)
# load necessary data -----
df <-
read.table(text = "County.Code Site.Num Date.Local Max.Value
3 3 1/1/2015 30
3 3 1/1/2015 45
3 3 1/1/2015 16
4 5 1/1/2015 32
4 5 1/1/2015 18
5 6 1/1/2015 8
5 7 1/1/2015 11"
, header = TRUE
, stringsAsFactors = FALSE)
# perform calculations -----
max.value.per.county.per.day <-
df %>%
group_by(County.Code, Date.Local) %>%
filter(Max.Value == max(Max.Value)) %>%
ungroup()
# view results ---
max.value.per.county.per.day
# A tibble: 3 x 4
# County.Code Site.Num Date.Local Max.Value
# <int> <int> <chr> <int>
# 1 3 3 1/1/2015 45
# 2 4 5 1/1/2015 32
# 3 5 7 1/1/2015 11
# end of script #