[r] NA의 특정 열을 포함하는 행 생략

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모든 행에 any가 포함 된 것을 삭제하는 것 같습니다 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어디 |에서 기능을 사용할 수 있습니까?



답변

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

편집 : s 가없는 행만 반환NA

열에서 하나 이상의 행을 모두 제거 NA하려면 complete.cases함수를 똑바로 사용하십시오 .

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


답변

‘서브셋’사용

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


답변

사용할 na.omit수 있습니다 data.table:

na.omit(data, cols = c("x", "z"))


답변

이 시도:

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


답변

두 개의 특정 열 중 하나에가 포함 된 경우 행을 생략하십시오 <NA>.

DF[!is.na(DF$x)&!is.na(DF$z),]