Development Tip

NA 만 포함하는 열을 삭제하는 방법은 무엇입니까?

yourdevel 2020. 11. 9. 21:18
반응형

NA 만 포함하는 열을 삭제하는 방법은 무엇입니까?


모든 NA 값이있는 일부 열을 포함하는 data.frame이 있는데 data.frame에서 어떻게 삭제할 수 있습니까?

기능을 사용할 수 있습니까?

na.omit(...) 

추가 인수를 지정 하시겠습니까?


한 가지 방법 :

df[, colSums(is.na(df)) != nrow(df)]

열의 NA 수가 행 수와 같으면 완전히 NA 여야합니다.

또는 유사하게

df[colSums(!is.na(df)) > 0]

다음은 dplyr 솔루션입니다.

df %>% select_if(~sum(!is.na(.)) > 0)

제거 할 것처럼 seeems 에 열 ALL NA 해야 할 일부 행과 열을 떠나들 NA들. 나는 이것을 할 것입니다 (그러나 효율적인 벡터화 된 soution이 있다고 확신합니다.

#set seed for reproducibility
set.seed <- 103
df <- data.frame( id = 1:10 , nas = rep( NA , 10 ) , vals = sample( c( 1:3 , NA ) , 10 , repl = TRUE ) )
df
#      id nas vals
#   1   1  NA   NA
#   2   2  NA    2
#   3   3  NA    1
#   4   4  NA    2
#   5   5  NA    2
#   6   6  NA    3
#   7   7  NA    2
#   8   8  NA    3
#   9   9  NA    3
#   10 10  NA    2

#Use this command to remove columns that are entirely NA values, it will elave columns where only some vlaues are NA
df[ , ! apply( df , 2 , function(x) all(is.na(x)) ) ]
#      id vals
#   1   1   NA
#   2   2    2
#   3   3    1
#   4   4    2
#   5   5    2
#   6   6    3
#   7   7    2
#   8   8    3
#   9   9    3
#   10 10    2

NA이있는 열을 제거하려는 경우 all명령을로 변경하면 됩니다 any.


또 다른 옵션은 janitor패키지입니다.

df <- remove_empty_cols(df)

https://github.com/sfirke/janitor


직관적 인 스크립트 : dplyr::select_if(~!all(is.na(.))). 말 그대로 모든 요소가없는 열만 유지합니다. (모든 요소 결측 열 삭제).

> df <- data.frame( id = 1:10 , nas = rep( NA , 10 ) , vals = sample( c( 1:3 , NA ) , 10 , repl = TRUE ) )

> df %>% glimpse()
Observations: 10
Variables: 3
$ id   <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
$ nas  <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ vals <int> NA, 1, 1, NA, 1, 1, 1, 2, 3, NA

> df %>% select_if(~!all(is.na(.))) 
   id vals
1   1   NA
2   2    1
3   3    1
4   4   NA
5   5    1
6   6    1
7   7    1
8   8    2
9   9    3
10 10   NA

다른 옵션 Filter

Filter(function(x) !all(is.na(x)), df)

참고 : @Simon O'Hanlon의 게시물 데이터.

참고 URL : https://stackoverflow.com/questions/15968494/how-to-delete-columns-that-contain-only-nas

반응형