Один из вариантов - загрузить все векторы 'start', 'end' в list
, а затем использовать Map
для выполнения соответствующего столбца, сравнение 'start', 'end'
startLst <- mget(ls(pattern = "^start\\d+$"))
endLst <- mget(ls(pattern = "^End\\d+$"))
xcols <- grep("^X\\d+", names(DATA), value = TRUE)
resultcols <- sub("^X", "Result", xcols)
DATA[resultcols] <- Map(function(vec, st, ed) vec >= st & vec < ed,
DATA[xcols], startLst, endLst)
Также можно обойтись без oop
DATA[resultcols] <- DATA[xcols] >= do.call(cbind, startLst) &
DATA[xcols] < do.call(cbind, endLst)
ПРИМЕЧАНИЕ. Здесь мы предполагаем, что length
каждого вектора 'start', 'end' совпадает с количество строк 'DATA'
Или это можно сделать в tidyverse
как
library(dplyr)
library(purrr)
pmap_dfc(list(DATA[xcols],
startLst,
endLst), ~ ..1 >= ..2 & ..1 < ..3)) %>%
rename_all(~ resultcols) %>%
bind_cols(DATA, .)