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


129

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어디 |에서 기능을 사용할 수 있습니까?

답변:


79

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))

당신의 접근 방식을 탐욕스럽게 만들 수 있습니까? NA가없는 모든 열을 가져옵니다.
Léo Léopold Hertz 준영

1
s 없이 을 반환한다는 의미 NA입니까? 처럼 completeFun(DF, names(DF))?
BenBarnes

옳은! 여기에 일반적인 요구이므로 답변에 추가하십시오. --mnel의 답변을 귀하의 것으로 확장 할 수 없다고 생각합니다. 당신의 기능 접근은 훌륭합니다!
Léo Léopold Hertz 준영

1
끝난! 팁을위한 Thx @ LéoLéopoldHertz 준영
BenBarnes

192

사용하다 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),]

1
데이터 세트의 모든 열에이 접근 방식을 어떻게 탐욕스럽게 적용합니까? 열 값 중 하나라도 NA 인 경우 건너 뜁니다. 따라서 데이터 세트 출력은 두 번째 열입니다.
Léo Léopold Hertz 준영

2
na.omit열에 NA가있는 모든 행을 탐욕스럽게 제거하는 데 사용na.omit(DF)
M. Viking

69

해들리가 tidyr방금 놀라운 기능을 했어요drop_na

library(tidyr)
DF %>% drop_na(y)
  x  y  z
1 1  0 NA
2 2 10 33

30

'서브셋'사용

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

9

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

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

3
cols=인수는 사용할 수 있습니다 data.table::na.omit라이브러리입니다. 베이스가 아닙니다 stats::na.omit.
M. Viking

3

이 시도:

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

2

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

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

1

이것을 시도하십시오 :

DF %>% t %>% na.omit %>% t

데이터 프레임을 전치하고 전치 전에 '열'인 null 행을 생략 한 다음 다시 전치합니다.


9
무슨 일이 일어나고 있는지 설명하십시오.
vonbrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.