Мы можем построить логический вектор с complete.cases
subset(df, !d > 0 | complete.cases(d))
# a b c d
#1 1 2 3 0
#3 6 4 0 1
#4 NA 5 0 0
Или используйте subset
с replace
subset(df, !replace(d, is.na(d), 0) > 0)
Или с tidyverse
library(tidyverse)
df %>%
filter(!replace_na(d, 0) >0)
, что немного отличается от упомянутого метода здесь или здесь
Данные
df <- structure(list(a = c(1L, 4L, 6L, NA), b = c(2L, NA, 4L, 5L),
c = c(3L, 1L, 0L, 0L), d = c(0L, NA, 1L, 0L)), class = "data.frame",
row.names = c("1", "2", "3", "4"))