R/searchWithin.R

#' Select or count ID's which range span over given value
#'
#' Select or count ID's which range span over given value
#'
#' @param id vector of individual indexes corresponding to other parameters
#' @param min minimum value of given ID
#' @param max maximum value of gievn ID
#' @param range if specified min and max ignored
#' @param value vector of values which are being checked
#' @param returned "count" - number of unique ID's having value within its range , or "id" list of ID having value within its range.
#' @export
searchWithin <- function(id, min, max, value, returned = "count"){

  if(missing(id)) id = 1:length(min)
  range <- data.table(id = id, min = min, max = max)
  res  <- list()

  if(returned == "id"){
    for(i in 1:length(value)){
      val <- value[i]
      temp <- range[val >= min & val <= max,]
      temp %<>% .[,value := val]
      res[[i]] <- temp[,.(id,value)]
    }
    res <- rbindlist(res, use.names=T, fill=T)
    res %<>% .[order(id, value)]
  }

  if(returned == "count"){
    for(i in 1:length(value)){
      val <- value[i]
      temp <- range[val >= min & val <= max,]
      res[[i]] <- temp$id %>% unique %>% length
    }
    res <- data.table(value, number = unlist(res))
  }

  res %>%
    return()
}
gogonzo/oddsandsods documentation built on May 12, 2019, 1:35 a.m.