выберите, если число содержится в диапазоне - PullRequest
0 голосов
/ 09 марта 2020
refDat <- structure(list(CatMin = c(0L, 17L, 28L, 34L, 48L, 64L, 120L
                    ), CatMax = c(16L, 27L, 33L, 47L, 63L, 119L, 160L), correctionRef = c(0L, 
                    0L, 0L, 0L, -5L, -15L, -40L)), row.names = c(NA, -7L), class = "data.frame")

Я хочу выбрать строку, в которой 30 лежит между CatMin & CatMax. В приведенном выше примере он находится в 3-й строке

with(refDat, CatMax <= 30 & CatMin >= 30)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE

# However, it is returning all the FALSE to me. 

Ответы [ 3 ]

3 голосов
/ 09 марта 2020

Один dplyr параметр может быть:

refDat %>%
 rowwise() %>%
 filter(between(30, CatMin, CatMax))

  CatMin CatMax correctionRef
   <int>  <int>         <int>
1     28     33             0

В качестве альтернативы, вы также можете использовать between() из data.table, который векторизован:

refDat %>%
 filter(data.table::between(30, CatMin, CatMax))
2 голосов
/ 09 марта 2020

Ваш подход был почти правильным, но логика ваших сравнений не совпадала. Попробуйте это:

refDat[with(refDat, CatMin <= 30 &  CatMax >= 30),]
# CatMin CatMax correctionRef
# 3     28     33             0
1 голос
/ 09 марта 2020

Вы можете сделать это apply.

apply(refDat[1:2], 1, function(x) 30 %in% seq(x[1], x[2]))
# [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...