Вот несколько способов сделать это
n <- 3
library(dplyr)
df %>% select_if(~sum(. < 0) < n)
# V1 V3 V6 V8
#1 1 0 0 1
#2 1 0 0 1
#3 1 -5 -3 -3
#4 4 4 4 3
#5 -2 4 -4 -2
Мы можем применить ту же логику в apply
/ sapply
df[apply(df < 0 , 2, sum) < n]
df[sapply(df, function(x) sum(x < 0)) < n]
Другим вариантом является подсчет sign
чисел для фильтрации столбцов
df %>% select_if(~sum(sign(.) == -1) < n)
df[apply(sign(df) == -1, 2, sum) < n]
df[sapply(sign(df), function(x) sum(x == -1)) < n]