Мы можем использовать rowSums
на выбранных столбцах. (столбцы, которые начинаются с "V" и числа).
cols <- grep('^V\\d+', names(df))
Если у вас есть NA
значения как отсутствующие данные
df[rowSums(is.na(df[cols])) < 3, ]
# Age Gender Group V1 V2 V3 V4 V5
#1 20 1 1 NA 2 1 NA 4
#2 21 2 1 2 NA 2 NA 1
Если пустые ячейки как отсутствующие данные.
df[rowSums(df[cols] == '') < 3, ]
Другой вариант с построчной разверткой apply
df[apply(is.na(df[cols]), 1, sum) < 3, ]
данные
df <- structure(list(Age = c(20L, 21L, 35L, 22L), Gender = c(1L, 2L,
2L, NA), Group = c(1L, 1L, 2L, 2L), V1 = c(NA, 2L, 2L, 1L), V2 = c(2L,
NA, NA, NA), V3 = c(1L, 2L, NA, NA), V4 = c(NA, NA, 1L, 2L),
V5 = c(4L, 1L, NA, NA)), class = "data.frame", row.names = c(NA, -4L))