Я не знаю, как это сделать, используя встроенную функциональность, но выбор строк, содержащих NA в переменных модели, является довольно распространенной задачей. Могут быть и более простые решения, но это одно:
Начнем с определения фрейма данных и объекта формулы. Обратите внимание, что первые и последние 10 наблюдений содержат пропуски в переменных модели. Также я поместил формулу в объект формулы, чтобы мы могли использовать ее как для извлечения переменных, так и для запуска самой модели.
testDf <- data.frame(y = rnorm(100), x1 = c(rnorm(90), rep(NA, 10)),
x2 = c(rep(NA, 10), runif(90)), x3 = rnorm(100, 3),
var_level = rbinom(100, size = 3, prob = 0.5))
form <- y ~ x1 + x2 + (1|var_level)
Теперь обратите внимание: all.vars(form)
дает все переменные, содержащиеся в формуле, определенной выше. Мы используем lapply
для запуска is.na
во всех выбранных столбцах testDf
. Результирующий список состоит из логических векторов, указывающих на наличие пропущенных значений. Он может быть агрегирован с использованием функции Reduce
и логического ИЛИ. Агрегация - это логический вектор, указывающий на все строки, содержащие NA, по крайней мере, в одной из переменных модели. Следовательно, чтобы выбрать остаток, его нужно отменить. Это сделано в следующей строке.
testDf[!Reduce("|", lapply(testDf[all.vars(form)], is.na)), ]
Взглянув на круглые числа, мы видим, что первый и последний 10 рядов были удалены.