Исключить строки, содержащие определенный столбец на
Я хочу знать, как опустить NA значений во фрейме данных, но только в некоторых столбцах, которые меня интересуют.
например,
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
но я только хочу опустить данные, где y и NA, поэтому результат должен быть
x y z
1 1 0 NA
2 2 10 33
na.omit кажется, удалить все строки содержат каких-либо NA.
может ли кто-нибудь помочь мне в этом простом вопросе?
но если сейчас я изменю вопрос например:
DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))
если я хочу опустить только x=na или z=na, куда я могу поставить | функции?
5 ответов:
вы могли бы использовать
complete.casesфункция и поместить его в функцию таким образом:DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22)) completeFun <- function(data, desiredCols) { completeVec <- complete.cases(data[, desiredCols]) return(data[completeVec, ]) } completeFun(DF, "y") # x y z # 1 1 0 NA # 2 2 10 33 completeFun(DF, c("y", "z")) # x y z # 2 2 10 33EDIT:только возвращаемые строки без
NAsесли вы хотите удалить все строки по крайней мере с одним
NAв любом столбце, просто используйте вверх:DF[complete.cases(DF), ] # x y z # 2 2 10 33или
completeFunуже укоренился в вашем рабочем процессе ;)completeFun(DF, names(DF))
использовать
is.naDF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22)) DF[!is.na(DF$y),]
Хэдли
tidyrтолько что получил эту удивительную функциюdrop_nalibrary(tidyr) DF %>% drop_na(y) x y z 1 1 0 NA 2 2 10 33