Исключить строки, содержащие определенный столбец на


Я хочу знать, как опустить 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 81

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:только возвращаемые строки без NAs

если вы хотите удалить все строки по крайней мере с одним 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

использовать 'subset'

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
subset(DF, !is.na(y))

попробуйте это:

cc=is.na(DF$y)
m=which(cc==c("TRUE"))
DF=DF[-m,]