如何按组确定超出范围的值的数量

How to determine number of values outside of range by group

我无法计算 a 中站点“Out”处的值的数量,这些值超出站点“In”处每个地块的值范围。那么,图 C 有多少值是图 A 和图 B 的 < b$Min 或 > b$Max。我需要为每个“In”图设置一个单独的值。

a <- data.frame (Site = c('Out','Out','Out','In','In','In','In','In','In'),
                 Plot = c('C','C','C','A','A','A','B','B','B'),
                 Value = c(.120,.400,.700,.144,.500,.688,.102,.500,.678))

b <- data.frame(Site = c('Out','In','In'),
               Plot = c('C','A','B'),
               Min = c(.120,.144,.102),
               Max = c(.700,.688,.678))

所需的输出将是 b 中的附加列,其中 Plot C 值的数量超出范围。

|Site|Plot|Min |Max |N|
|----|----|----|----|-| 
|Out |C   |.120|.700|0|   
|In  |A   |.144|.688|2|      
|In  |B   |.102|.678|1|

您可以使用以下方法:

inner_join(a %>% filter(Site=="Out") %>% mutate(Site="In"),
           b %>% filter(Site=="In"), by="Site") %>% 
  filter(data.table::between(Value, Min, Max)) %>% 
  count(Plot.x, Plot.y)

输出:

  Plot.x Plot.y     n
  <chr>  <chr>  <int>
1 C      A          1
2 C      B          2

如果不想用data.table::between(),可以用dplyr::between(),但是rowwise()