Исключить строки, содержащие определенный столбец на
Я хочу знать, как опустить 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 33
EDIT:только возвращаемые строки без
NA
sесли вы хотите удалить все строки по крайней мере с одним
NA
в любом столбце, просто используйте вверх:DF[complete.cases(DF), ] # x y z # 2 2 10 33
или
completeFun
уже укоренился в вашем рабочем процессе ;)completeFun(DF, names(DF))
использовать
is.na
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22)) DF[!is.na(DF$y),]
Хэдли
tidyr
только что получил эту удивительную функциюdrop_na
library(tidyr) DF %>% drop_na(y) x y z 1 1 0 NA 2 2 10 33