Можно использовать %in%
, чтобы проверить, присутствуют ли значения '0', 'n / a' или '-') в столбце вместе с is.na
, используя |
, Reduce
это к единственному логическому vector
с |
, чтобы проверить, имеют ли какие-либо значения в строке эти символы, отрицание (!
- означает, что ни один из элементов в строке не имеет этого символа) и использовать это o для подстановки строк
i1 <- !Reduce(`|`, lapply(df1, function(x) is.na(x)| x %in% c(0, "n/a", "--")))
df2 <- df1[i1, , drop = FALSE]
# X Y 2010 2011 2012 2013 2014
#4 B XZ 15 16 12 13 14
Или используя filter_all
library(dplyr)
df1 %>%
filter_all(all_vars(!(is.na(.) | . %in% c(0, "n/a", "--"))))
# X Y 2010 2011 2012 2013 2014
#1 B XZ 15 16 12 13 14
данные
df1 <- structure(list(X = c("A", "A", "B", "B", "C", "C"), Y = c("XY",
"XZ", "XY", "XZ", "XY", "XZ"), `2010` = c(0L, 11L, 0L, 15L, NA,
8L), `2011` = c("0", "13", "--", "16", NA, "12"), `2012` = c("0",
"n/a", "0", "12", NA, "11"), `2013` = c("10", "12", "7", "13",
NA, "n/a"), `2014` = c("15", "14", "--", "14", NA, "n/a")),
class = "data.frame", row.names = c(NA,
-6L))