between
не векторизовано для значений left
, right
. Вместо этого это можно сделать, используя только операторы сравнения (>/<
)
library(dplyr)
df %>%
filter(value > low_sd, value <= high_sd)
# group value low_sd high_sd
#1 a 4 2 8
#2 b 6 4 9
Но если мы обернемся с Vectorize
, это будет работать также
df %>%
filter(Vectorize(dplyr::between)(value, low_sd, high_sd))
# group value low_sd high_sd
#1 a 4 2 8
#2 b 6 4 9
данные
df <- structure(list(group = c("a", "a", "b", "b"), value = c(4L, 1L,
6L, 12L), low_sd = c(2L, 2L, 4L, 4L), high_sd = c(8L, 8L, 9L,
9L)), class = "data.frame", row.names = c(NA, -4L))