2017-01-26 12 views
1

데이터 집합에 이와 비슷한 항목이 있습니다. 적어도 하나의 값만있는 경우가 아니라 NA 만있는 행만 삭제하려고합니다. NA가있는 전체 행만 삭제합니다. R

 [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 1 NA 4 
[3,] 4 6 7 
[4,] NA NA NA 
[5,] 4 8 NA 

example 그들은 내가 원하는 것을 삭제 할 수 있었다, 그러나 나는 동일한 방법으로 수행하려고 할 때, 그것은 작동하지 않습니다.

은 이미 자신의 예를 시도했다 :

데이터 [rowSums (is.na (데이터)) =에는 NcoI (데이터)!]

하지만 내 행의 수는하지 않습니다 이것 같이 바꾸십시오.

class(NA) 
[1] "logical" 

당신이 요청하는 또 다른 방법을 알아주세요 :

 [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 1 NA 4 
[3,] 4 6 7 
[4,] 4 8 NA 

내 NA의 내가 자신의 클래스를 요청 characters.if되지 않습니다?

______UPDATE_____

아마도 내가 잘못 말한 것일 수 있습니다.

Date   Product Code protein fat 
2016-01-01  aaa  0001  NA  NA 
2016-01-01  bbb  0003  NA  NA 
2016-02-01  ccc  0032  NA  NA 

그래서 행 :

내 문제, 그리고 내가 정보하지만 그 후 3 열이 있기 때문에 코드가

mymat[rowSums(is.na(mymat)) != ncol(mymat), ] 

가 작동하지 않는 이유는 그것의이 같은 모든 NA입니다 전적으로 3 번째 칸 이후에 NA가 아닙니다 ...하지만 전체 행을 제거하고 싶습니다. (1 : 5)

고마워요!

+1

을 당신이 행 번호가 없습니다. dim30을 확인하십시오 – akrun

답변

0

당신은

 [,1] [,2] [,3] 
[1,] 1 4 NA 
[2,] 2 5 NA 
[3,] 3 6 NA 
[4,] NA NA NA 


mymat[as.integer(rowSums(is.na(mymat)) != ncol(mymat)), ] 

당신에게

 [,1] [,2] [,3] 
[1,] 1 4 NA 
[2,] 1 4 NA 
[3,] 1 4 NA 

를 제공하지만

mymat[rowSums(is.na(mymat)) != ncol(mymat), ] 
0123을 원하는에 변환하는 as.integer

mymat <- matrix(c(1:3, NA, 4:6, NA, rep(NA, 4)), ncol = 3) 

을 삭제해야 이 업데이트 된 설명이 작동하는지

 [,1] [,2] [,3] 
[1,] 1 4 NA 
[2,] 2 5 NA 
[3,] 3 6 NA 

건배, 마크

+0

당신의 도움에 감사드립니다, 그러나 나는 내가 아주 잘 설명하지 않았다고 생각합니다. 이제 제 질문을 업데이트했습니다. 제발 도와 줄 수 있습니까? –

+0

열을 삭제하고 행을 삭제하지 않을까요? –

+0

나는 다른 방법으로 그것을했지만 어쨌든 당신을 감사드립니다! :) –

0

확인을 얻으려면. NA을 확인할 때 data.frame의 하위 집합으로 정보 열을 무시합니다. 나는 이것이 변수와 관측을 저장하는 일반적인 ("단정") 형식이기 때문에, 내가, 데이터 프레임에 행렬을 강요 것 숫자의 조합 및 NA

df1 <- data.frame(Date=c("2016-01-01", "2016-01-01", "2016-02-01", "2016-03-01", "2016-03-01"), 
       Product=c("aaa", "bbb", "ccc", "ddd", "eee"), 
       Code=c("0001", "0003", "0032", "0005", "0007"), 
       protein=c(NA, NA, NA, 5, NA), 
       fat=c(NA, NA, NA, NA, 4)) 

# place any columns you do not want to check for NA in names.info 
names.info <- c("Date", "Product", "Code") 
names.check <- setdiff(names(df1), names.info) 

df1[rowSums(is.na(df1[, names.check])) != length(names.check), ] 

     Date Product Code protein fat 
4 2016-03-01  ddd 0005  5 NA 
5 2016-03-01  eee 0007  NA 4 
+0

당신의 도움에 감사하지만, 나는 내가 아주 잘 설명하지 않았다고 생각해. 이제 제 질문을 업데이트했습니다. 제발 도와 주실 수 있나요? –

+0

@AnaRaquel 정보 열을 무시하고 사용되는 데이터 열 수에 관계없이 업데이트 된 답변을 참조하십시오. – manotheshark

0

먼저 포함 된 일부 추가 행을 추가했다.열에 기능도 있습니다

df <- data.frame(
    a = c(1, 1, 4, NA, 4), 
    b = c(2, NA, 6, NA, 8), 
    c = c(3, 4, 7, NA, NA) 
) 

# get row numbers of empty rows 
empty_rows(df) 

## [1] 4 

# remove empty rows 
remove_empty_rows(df) 

## A tibble: 4 × 3 
##  a  b  c 
## * <dbl> <dbl> <dbl> 
## 1  1  2  3 
## 2  1 NA  4 
## 3  4  6  7 
## 4  4  8 NA 

라이브러리 (sjmisc) : empty_cols()remove_empty_cols()을 그럼 당신은 sjmisc-package에서 remove_empty_rows() 기능을 사용할 수 있습니다.

방금 ​​완료 경우 (행)을 유지하려면

, complete.cases()를 사용

df[complete.cases(df), ] 

## a b c 
## 1 1 2 3 
## 3 4 6 7