R dplyr查找group by的总和,即使不满足参数,也可以跨多列进行过滤

问题描述 投票:1回答:1

我有一个数据框,我试图查找总天数大于某个特定天数的天数,并按每个唯一站点将其分组,并为每个唯一站点为此#创建一个新列。我还希望即使电台不符合该标准,也要有一个0值(这样可以显示所有电台)。我通常没有问题,但执行此数据帧的方式使我感到困难。日期是列标题(我知道是不,不是),但这是我的老板希望表格看起来的样子。我将不胜感激!

数据样本:

      structure(list(`AQS Code` = c(340071001, 340170006, 340010006, 
340070002, 340273001, 340150002), Latitude = c("39.684249999999999", 
"40.670250000000003", "39.464872", "39.934446000000001", "40.787627999999998", 
"39.800339000000001"), State = c("NJ", "NJ", "NJ", "NJ", "NJ", 
"NJ"), `Site Name` = c("Ancora State Hospital", "Bayonne", "Brigantine", 
"Camden Spruce St", "Chester", "Clarksboro"), `Elev (m)` = c("33.0", 
"3.0", "5.0", "4.0", "278.0", "12.0"), County = c("Camden, NJ", 
"Hudson, NJ", "Atlantic, NJ", "Camden, NJ", "Morris, NJ", "Gloucester, NJ"
), `03/01/2019` = c(36, 30, 36, 32, 34, 30), `03/02/2019` = c(31, 
34, 34, 32, 43, 29), `03/03/2019` = c(35, 42, 36, 36, 47, 30), 
    `03/04/2019` = c(46, 44, 48, 44, 49, 43), `03/05/2019` = c(39, 
    38, 43, 37, 44, 37), `03/06/2019` = c(38, 36, 41, 35, 44, 
    37), `03/07/2019` = c(38, 33, 40, 33, 43, 40), `03/08/2019` = c(45, 
    30, 45, 40, 48, 42), `03/09/2019` = c(46, 36, 47, 45, 57, 
    41), `03/10/2019` = c(47, 41, 48, 44, 46, 38), `03/11/2019` = c(45, 
    40, 48, 44, 50, 43), `03/12/2019` = c(46, 40, 49, 48, 48, 
    49), `03/13/2019` = c(51, 37, 46, 45, 48, 45), `03/14/2019` = c(54, 
    47, 52, 49, 48, 47), `03/15/2019` = c(46, 44, 46, 38, 49, 
    40), `03/16/2019` = c(44, 43, 47, 45, 45, 42), `03/17/2019` = c(44, 
    43, 46, 44, 46, 42), `03/18/2019` = c(41, 42, 44, 41, 46, 
    38), `03/19/2019` = c(44, 42, 45, 43, 48, 42), `03/20/2019` = c(50, 
    49, 50, 48, 52, 47), `03/21/2019` = c(46, 37, 46, 45, 45, 
    40), `03/22/2019` = c(44, 41, 46, 43, 48, 42), `03/23/2019` = c(43, 
    42, 46, 45, 46, 43), `03/24/2019` = c(50, 48, 50, 47, 54, 
    49), `03/25/2019` = c(39, 41, 43, 41, 48, 35), `03/26/2019` = c(39, 
    45, 45, 45, 46, 41), `03/27/2019` = c(47, 40, 46, 42, 41, 
    42), `03/28/2019` = c(52, 41, 46, 48, 51, 48), `03/29/2019` = c(44, 
    26, 45, 28, 39, 36), `03/30/2019` = c(59, 47, 48, 56, 61, 
    51), `03/31/2019` = c(46, 36, 43, 45, 45, 41), `04/01/2019` = c(41, 
    40, 47, 45, 47, 43), `04/02/2019` = c(48, 44, 47, 47, 48, 
    44), `04/03/2019` = c(52, 48, 57, 52, 56, 52), `04/04/2019` = c(52, 
    45, 54, 51, 52, 51), `04/05/2019` = c(41, 31, 45, 36, 42, 
    38), `04/06/2019` = c(49, 41, 40, 48, 51, 45), `04/07/2019` = c(58, 
    45, 56, 55, 57, 55), `04/08/2019` = c(49, 39, 43, 41, 51, 
    45), `04/09/2019` = c(42, 29, 38, 43, 39, 40), `04/10/2019` = c(43, 
    33, 49, 40, 38, 39), `04/11/2019` = c(40, 32, 40, 39, 37, 
    38), `04/12/2019` = c(49, 42, 46, 41, 42, 43), `04/13/2019` = c(43, 
    42, 43, 43, 50, 38), `04/14/2019` = c(31, 26, 29, 29, 35, 
    24), `04/15/2019` = c(43, 38, 45, 44, 46, 43), `04/16/2019` = c(51, 
    45, 55, 46, 49, 49), `04/17/2019` = c(46, 41, 47, 45, 43, 
    43), `04/18/2019` = c(58, 40, 52, 52, 40, 49), `04/19/2019` = c(42, 
    40, 43, 35, 42, 35), `04/20/2019` = c(42, 38, 44, 40, 43, 
    36), `04/21/2019` = c(40, 41, 38, 42, 40, 38), `04/22/2019` = c(36, 
    28, 34, 37, 34, 34), `04/23/2019` = c(53, 43, 50, 49, 53, 
    50), `04/24/2019` = c(48, 38, 54, 43, 43, 44), `04/25/2019` = c(41, 
    32, 40, 35, 40, 36), `04/26/2019` = c(45, 39, 45, 41, 45, 
    42), `04/27/2019` = c(50, 44, 51, 46, 47, 48), `04/28/2019` = c(28, 
    32, 37, 37, 39, 34), `04/29/2019` = c(46, 41, 43, 43, 42, 
    42), `04/30/2019` = c(47, 28, 44, 47, 43, 44), `05/01/2019` = c(43, 
    36, 42, 39, 39, 36), `05/02/2019` = c(50, 35, 38, 46, 47, 
    41), `05/03/2019` = c(35, 27, 39, 32, 27, 29), `05/04/2019` = c(34, 
    21, 36, 38, 27, 32), `05/05/2019` = c(34, 26, 37, 31, 33, 
    28), `05/06/2019` = c(47, 39, 43, 44, 37, 39), `05/07/2019` = c(48, 
    40, 46, 43, 54, 38), `05/08/2019` = c(40, 35, 40, 37, 45, 
    31), `05/09/2019` = c(39, 34, 41, 34, 25, 32), `05/10/2019` = c(43, 
    38, 39, 37, 40, 35), `05/11/2019` = c(47, 41, 45, 44, 40, 
    36), `05/12/2019` = c(40, 34, 45, 40, 35, 35), `05/13/2019` = c(42, 
    26, 45, 36, 32, 33), `05/14/2019` = c(29, 19, 27, 25, 30, 
    28), `05/15/2019` = c(44, 35, 43, 41, 45, 35), `05/16/2019` = c(57, 
    46, 57, 54, 51, 47), `05/17/2019` = c(56, 45, 51, 58, 55, 
    48), `05/18/2019` = c(55, 48, 48, 58, 52, 47), `05/19/2019` = c(52, 
    45, 46, 50, 53, 38), `05/20/2019` = c(54, 44, 42, 57, 52, 
    48), `05/21/2019` = c(38, 35, 42, 37, 39, 29), `05/22/2019` = c(50, 
    46, 39, 48, 47, 42), `05/23/2019` = c(40, 38, 38, 32, 42, 
    26), `05/24/2019` = c(49, 38, 52, 47, 43, 37), `05/25/2019` = c(39, 
    38, 38, 39, 41, 31), `05/26/2019` = c(53, 44, 50, 51, 47, 
    38), `05/27/2019` = c(47, 38, 40, 46, 38, 34), `05/28/2019` = c(45, 
    30, 44, 37, 33, 29), `05/29/2019` = c(59, 26, 48, 58, 34, 
    40), `05/30/2019` = c(46, 30, 40, 48, 31, 36), `05/31/2019` = c(58, 
    44, 53, 52, 46, 49), `06/01/2019` = c(51, 52, 53, 57, 56, 
    56), `06/02/2019` = c(55, 53, 51, 57, 56, 54), `06/03/2019` = c(41, 
    33, 46, 36, 37, 37), `06/04/2019` = c(45, 41, 45, 42, 47, 
    44), `06/05/2019` = c(55, 60, 47, 56, 65, 52), `06/06/2019` = c(54, 
    52, 50, 56, 52, 50), `06/07/2019` = c(55, 56, 56, 59, 45, 
    53), `06/08/2019` = c(55, 46, 51, 50, 54, 49), `06/09/2019` = c(46, 
    41, 40, 45, 48, 42), `06/10/2019` = c(28, 22, 32, 24, 26, 
    23), `06/11/2019` = c(41, 35, 40, 40, 40, 37), `06/12/2019` = c(35, 
    35, 35, 36, 44, 35), `06/13/2019` = c(43, 36, 42, 39, 36, 
    37), `06/14/2019` = c(34, 33, 37, 30, 34, 36), `06/15/2019` = c(51, 
    57, 46, 53, 51, 54), `06/16/2019` = c(48, 49, 43, 49, 45, 
    45), `06/17/2019` = c(57, 35, 53, 44, 33, 47), `06/18/2019` = c(41, 
    36, 38, 43, 34, 40), `06/19/2019` = c(31, 31, 28, 30, 31, 
    31), `06/20/2019` = c(35, 28, 34, 39, 34, 33), `06/21/2019` = c(35, 
    28, 33, 34, 32, 34), `06/22/2019` = c(31, 24, 31, 29, 27, 
    30), `06/23/2019` = c(44, 36, 39, 40, 38, 43), `06/24/2019` = c(50, 
    53, 49, 51, 46, 46), `06/25/2019` = c(50, 40, 38, 48, 44, 
    45), `06/26/2019` = c(71, 60, 55, 61, 61, 61), `06/27/2019` = c(72, 
    60, 70, 67, 57, 70), `06/28/2019` = c(67, 67, 72, 71, 64, 
    68), `06/29/2019` = c(63, 58, 56, 61, 55, 59), `06/30/2019` = c(42, 
    35, 42, 40, 36, 39), `07/01/2019` = c(55, 41, 40, 51, 41, 
    50), `07/02/2019` = c(74, 56, 59, 78, 57, 80), `07/03/2019` = c(61, 
    65, 47, 54, 44, 54), `07/04/2019` = c(55, 56, 51, 54, 61, 
    44), `07/05/2019` = c(43, 50, 39, 48, 52, 42), `07/06/2019` = c(38, 
    45, 37, 47, 39, 36), `07/07/2019` = c(32, 33, 30, 38, 36, 
    33), `07/08/2019` = c(23, 37, 28, 36, 28, 24), `07/09/2019` = c(53, 
    49, 49, 58, 45, 56), `07/10/2019` = c(52, 66, 46, 62, 58, 
    51), `07/11/2019` = c(37, 40, 32, 39, 42, 28), `07/12/2019` = c(55, 
    41, 53, 51, 41, 51), `07/13/2019` = c(52, 46, 43, 59, 51, 
    56), `07/14/2019` = c(60, 48, 54, 58, 46, 56), `07/15/2019` = c(52, 
    39, 37, 53, 37, 50), `07/16/2019` = c(57, 63, 51, 69, 62, 
    54), `07/17/2019` = c(45, 65, 48, 57, 44, 43), `07/18/2019` = c(35, 
    28, 35, 37, 33, 30), `07/19/2019` = c(51, 54, 41, 67, 48, 
    59), `07/20/2019` = c(59, 46, 45, 62, 46, 56), `07/21/2019` = c(55, 
    45, 44, 50, 43, 46), `07/22/2019` = c(49, 52, 45, 51, 52, 
    40), `07/23/2019` = c(31, 24, 26, 31, 25, 16), `07/24/2019` = c(47, 
    45, 40, 41, 33, 41), `07/25/2019` = c(50, 43, 43, 51, 35, 
    51), `07/26/2019` = c(49, 59, 53, 58, 45, 66), `07/27/2019` = c(62, 
    61, 50, 77, 56, 69), `07/28/2019` = c(59, 55, 45, 61, 59, 
    60), `07/29/2019` = c(61, 57, 50, 64, 62, 68), `07/30/2019` = c(59, 
    62, 48, 61, 53, 55), `07/31/2019` = c(60, 55, 42, 56, 46, 
    56), `08/01/2019` = c(54, 64, 65, 56, 46, 55), `08/02/2019` = c(57, 
    55, 51, 54, 59, 47), `08/03/2019` = c(53, 53, 41, 63, 50, 
    54), `08/04/2019` = c(58, 57, 48, 60, 44, 59), `08/05/2019` = c(51, 
    41, 42, 68, 54, 60), `08/06/2019` = c(48, 50, 45, 53, 57, 
    48), `08/07/2019` = c(50, 41, 34, 48, 44, 44), `08/08/2019` = c(58, 
    52, 45, 59, 53, 57), `08/09/2019` = c(59, 40, 43, 56, 43, 
    57), `08/10/2019` = c(45, 30, 41, 40, 31, 41), `08/11/2019` = c(43, 
    30, 33, 41, 31, 41), `08/12/2019` = c(49, 47, 46, 55, 50, 
    47), `08/13/2019` = c(31, 43, 31, 35, 42, 17), `08/14/2019` = c(35, 
    48, 42, 50, 40, 36), `08/15/2019` = c(43, 44, 43, 48, 51, 
    42), `08/16/2019` = c(39, 42, 31, 49, 47, 40), `08/17/2019` = c(41, 
    41, 33, 46, 49, 36), `08/18/2019` = c(40, 44, 31, 46, 45, 
    34), `08/19/2019` = c(42, 47, 30, 52, 50, 40), `08/20/2019` = c(53, 
    55, 47, 56, 62, 48), `08/21/2019` = c(38, 50, 32, 42, 42, 
    34), `08/22/2019` = c(61, 51, 52, 57, 50, 56), `08/23/2019` = c(25, 
    28, 22, 26, 23, 20), `08/24/2019` = c(34, 32, 39, 33, 26, 
    33), `08/25/2019` = c(26, 28, 24, 32, 27, 28), `08/26/2019` = c(33, 
    38, 33, 37, 45, 30), `08/27/2019` = c(30, 35, 32, 34, 40, 
    29), `08/28/2019` = c(29, 19, 24, 41, 30, 33), `08/29/2019` = c(49, 
    39, 48, 45, 40, 47), `08/30/2019` = c(51, 54, 46, 63, 56, 
    58), `08/31/2019` = c(56, 43, 48, 50, 35, 54), `09/01/2019` = c(43, 
    38, 40, 44, 43, 41), `09/02/2019` = c(40, 31, 37, 41, 36, 
    31), `09/03/2019` = c(47, 48, 40, 55, 56, 57), `09/04/2019` = c(46, 
    45, 31, 51, 46, 42), `09/05/2019` = c(31, 27, 31, 34, 30, 
    31), `09/06/2019` = c(29, 26, 31, 28, 28, 18), `09/07/2019` = c(43, 
    34, 42, 42, 35, 38), `09/08/2019` = c(42, 36, 41, 40, 35, 
    40), `09/09/2019` = c(43, 38, 40, 50, 38, 44), `09/10/2019` = c(36, 
    29, 31, 44, 41, 37), `09/11/2019` = c(48, 46, 31, 61, 58, 
    41), `09/12/2019` = c(57, 30, 49, 52, 34, 42), `09/13/2019` = c(28, 
    27, 27, 28, 28, 24), `09/14/2019` = c(32, 32, 30, 35, 29, 
    28), `09/15/2019` = c(49, 36, 31, 50, 38, 42), `09/16/2019` = c(56, 
    25, 50, 53, 34, 37), `09/17/2019` = c(47, 39, 39, 45, 39, 
    39), `09/18/2019` = c(33, 29, 33, 35, 32, 31), `09/19/2019` = c(30, 
    25, 31, 38, 41, 37), `09/20/2019` = c(50, 50, 45, 54, 54, 
    53), `09/21/2019` = c(59, 65, 44, 70, 51, 66), `09/22/2019` = c(57, 
    59, 40, 56, 66, 56), `09/23/2019` = c(56, 65, 36, 62, 53, 
    49), `09/24/2019` = c(33, 27, 35, 33, 30, 31), `09/25/2019` = c(50, 
    38, 39, 51, 49, 52), `09/26/2019` = c(48, 40, 39, 46, 39, 
    47), `09/27/2019` = c(47, 39, 43, 51, 44, 51), `09/28/2019` = c(45, 
    45, 38, 46, 47, 48), `09/29/2019` = c(40, 37, 37, 37, 35, 
    40), `09/30/2019` = c(30, 28, 30, 30, 26, 31), `10/01/2019` = c(39, 
    44, 34, 43, 46, 43), `10/02/2019` = c(55, 47, 51, 46, 52, 
    54), `10/03/2019` = c(17, 12, 20, 16, 11, 9), `10/04/2019` = c(27, 
    23, 28, 30, 28, 23), `10/05/2019` = c(32, 29, 33, 35, 31, 
    28), `10/06/2019` = c(38, 33, 34, 36, 30, 32), `10/07/2019` = c(37, 
    34, 32, 36, 32, 35), `10/08/2019` = c(NA_real_, NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_), `10/09/2019` = c(15, 
    16, 22, 23, 23, 14), `10/10/2019` = c(36, 33, 38, 38, 36, 
    35), `10/11/2019` = c(31, 34, 30, 38, 37, 35), `10/12/2019` = c(38, 
    25, 35, 38, 31, 34), `10/13/2019` = c(30, 30, 31, 33, 35, 
    30), `10/14/2019` = c(43, 37, 39, 45, 47, 43), `10/15/2019` = c(38, 
    25, 37, 36, 34, 35), `10/16/2019` = c(45, 42, 46, 41, 44, 
    33), `10/17/2019` = c(26, 18, 27, 25, 22, 24), `10/18/2019` = c(26, 
    22, 27, 32, 31, 29), `10/19/2019` = c(33, 28, 32, 34, 36, 
    32), `10/20/2019` = c(35, 30, 39, NA, 31, 28), `10/21/2019` = c(36, 
    31, 35, 38, 41, 34), `10/22/2019` = c(31, 26, 32, 28, NA, 
    23), `10/23/2019` = c(36, 30, 35, 36, 38, 35), `10/24/2019` = c(41, 
    34, 40, 38, 38, 36), `10/25/2019` = c(40, 28, 37, 37, 37, 
    38), `10/26/2019` = c(34, 33, 37, 35, 34, 33), `10/27/2019` = c(30, 
    31, 30, 31, 35, 29), `10/28/2019` = c(26, 24, 32, 30, 32, 
    27), `10/29/2019` = c(20, 9, 30, 18, 14, 13), `10/30/2019` = c(17, 
    10, 26, 20, 23, 13), `10/31/2019` = c(32, 29, 33, 32, 29, 
    NA), Max = c(74, 67, 72, 78, 66, 80)), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

这是我尝试过的:

test<-test%>%
  dplyr::filter_at(vars(7:252),any_vars(.>70))%>%
  dplyr::group_by(`Site Name`)%>%
  dplyr::summarise(`Daily Exceedance` = n())

我想要什么:

下图是我想要的。我要添加超出列。

enter image description here

r dataframe filter dplyr
1个回答
1
投票

我们可以做一个rowSums来做到这一点

library(dplyr)
test %>% 
    mutate(Exceed = rowSums(select(., 7:252) > 70, na.rm = TRUE)) %>%
    select(`AQS Code`:County, Exceed, everything())
# A tibble: 6 x 253
#  `AQS Code` Latitude State `Site Name` `Elev (m)` County Exceed `03/01/2019` `03/02/2019` `03/03/2019` `03/04/2019` `03/05/2019` `03/06/2019`
#       <dbl> <chr>    <chr> <chr>       <chr>      <chr>   <dbl>        <dbl>        <dbl>        <dbl>        <dbl>        <dbl>        <dbl>
#1  340071001 39.6842… NJ    Ancora Sta… 33.0       Camde…      4           36           31           35           46           39           38
#2  340170006 40.6702… NJ    Bayonne     3.0        Hudso…      0           30           34           42           44           38           36
#3  340010006 39.4648… NJ    Brigantine  5.0        Atlan…      2           36           34           36           48           43           41
#4  340070002 39.9344… NJ    Camden Spr… 4.0        Camde…      4           32           32           36           44           37           35
#5  340273001 40.7876… NJ    Chester     278.0      Morri…      0           34           43           47           49           44           44
#6  340150002 39.8003… NJ    Clarksboro  12.0       Glouc…      2           30           29           30           43           37           37
# … with 240 more variables: `03/07/2019` <dbl>, `03/08/2019` <dbl>, `03/09/2019` <dbl>, `03/10/2019` <dbl>, `03/11/2019` <dbl>,
#   `03/12/2019` <dbl>, `03/13/2019` <dbl>, `03/14/2019` <dbl>, `03/15/2019` <dbl>, `03/16/2019` <dbl>, `03/17/2019` <dbl>, `03/18/2019` <dbl>,
#   `03/19/2019` <dbl>, `03/20/2019` <dbl>, `03/21/2019` <dbl>, `03/22/2019` <dbl>, `03/23/2019` <dbl>, `03/24/2019` <dbl>, `03/25/2019` <dbl>,
#   `03/26/2019` <dbl>, `03/27/2019` <dbl>, `03/28/2019` <dbl>, `03/29/2019` <dbl>, `03/30/2019` <dbl>, `03/31/2019` <dbl>, `04/01/2019` <dbl>,
#   `04/02/2019` <dbl>, `04/03/2019` <dbl>, `04/04/2019` <dbl>, `04/05/2019` <dbl>, `04/06/2019` <dbl>, `04/07/2019` <dbl>, `04/08/2019` <dbl>,
#   `04/09/2019` <dbl>, `04/10/2019` <dbl>, `04/11/2019` <dbl>, `04/12/2019` <dbl>, `04/13/2019` <dbl>, `04/14/2019` <dbl>, `04/15/2019` <dbl>,
#   `04/16/2019` <dbl>, `04/17/2019` <dbl>, `04/18/2019` <dbl>, `04/19/2019` <dbl>, `04/20/2019` <dbl>, `04/21/2019` <dbl>, `04/22/2019` <dbl>,
#   `04/23/2019` <dbl>, `04/24/2019` <dbl>, `04/25/2019` <dbl>, `04/26/2019` <dbl>, `04/27/2019` <dbl>, `04/28/2019` <dbl>, `04/29/2019` <dbl>,
#   `04/30/2019` <dbl>, `05/01/2019` <dbl>, `05/02/2019` <dbl>, `05/03/2019` <dbl>, `05/04/2019` <dbl>, `05/05/2019` <dbl>, `05/06/2019` <dbl>,
#   `05/07/2019` <dbl>, `05/08/2019` <dbl>, `05/09/2019` <dbl>, `05/10/2019` <dbl>, `05/11/2019` <dbl>, `05/12/2019` <dbl>, `05/13/2019` <dbl>,
#   `05/14/2019` <dbl>, `05/15/2019` <dbl>, `05/16/2019` <dbl>, `05/17/2019` <dbl>, `05/18/2019` <dbl>, `05/19/2019` <dbl>, `05/20/2019` <dbl>,
#   `05/21/2019` <dbl>, `05/22/2019` <dbl>, `05/23/2019` <dbl>, `05/24/2019` <dbl>, `05/25/2019` <dbl>, `05/26/2019` <dbl>, `05/27/2019` <dbl>,
#   `05/28/2019` <dbl>, `05/29/2019` <dbl>, `05/30/2019` <dbl>, `05/31/2019` <dbl>, `06/01/2019` <dbl>, `06/02/2019` <dbl>, `06/03/2019` <dbl>,
#   `06/04/2019` <dbl>, `06/05/2019` <dbl>, `06/06/2019` <dbl>, `06/07/2019` <dbl>, `06/08/2019` <dbl>, `06/09/2019` <dbl>, `06/10/2019` <dbl>,
#   `06/11/2019` <dbl>, `06/12/2019` <dbl>, `06/13/2019` <dbl>, `06/14/2019` <dbl>, …
> 

如果需要特定位置,另一个选择是add_column

library(tibble)
test %>%
    add_column(Exceed = rowSums(.[7:252] > 70, na.rm= TRUE), .after = "County")
© www.soinside.com 2019 - 2024. All rights reserved.