找出具有匹配变量的行,并删除值较小的行

时间:2018-10-03 23:50:18

标签: r if-statement conditional-statements

我每天都在处理通过一个县的多台监视器收集的数据。我想在每个监控日中保留一个县中所有监控器的最大集中度。首先,我需要确定在同一天报告了同一县的值的行,然后删除报告值最低的行。这是一个示例数据框(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)]]   
}

我已经搜索了此信息,但只能根据两个条件而不是三个条件来查找用于删除行的信息。另外,我只是很困惑如何提取最小值。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

概述

dfCounty.CodeDate.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 #