Использование ==
и <=
не имеет особого смысла, поскольку значение слева - это одно значение, а значение справа - вектор. Я предполагаю, что вам нужно проверить, соответствует ли ID
любому другому ID
. Для этого вы можете использовать
with(your_data, ID[i] %in% ID[-i])
Для того, чтобы сохранить цикл, я советую выбрать дубликаты ID
с функцией duplicate
. Например,
bad_ID <- duplicated(your_data$ID)
Логика еще более неоднозначна для третьего условия. Я (дико) предполагаю, что вы хотите, чтобы значение END
было меньше, чем все другие значения START
минус 100.
Нам придется выполнить цикл для этого условия.
Тогда полная логика
is_recall <- function(data)
{
bad_ID <- duplicated(your_data$ID)
bad_attr <- duplicated(your_data$ATTRIBUTE)
bad_end <- with(your_data, sapply(
seq_len(nrow(your_data)),
function(i) END[i] < min(START[-i] - 100)
))
}