如何按组确定超出范围的值的数量
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()
我无法计算 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()