문제

R을 사용하여로드 할 수있는 데이터 파일의 CSV가 있습니다. read.csv()

일부 데이터가 누락되었으므로 데이터 프레임을 전적으로 비 이동 데이터로 구성된 데이터 프레임을 낮추고 싶습니다. NULL 어디서나 나타나면 필터링 된 데이터 세트에서 해당 열과 행을 제외하고 싶습니다.

나는 내장 된 R 벡터 작업으로 간단하게 이것을 할 수 있다는 것을 알고 있지만, 정확히 어떻게 해야할지 잘 모르겠습니다.

내 질문을 좀 더 구체적으로 만들려면 여기에 데이터의 빠른 샘플이있어 내가하고 싶은 일을 볼 수 있습니다.

DocID       Anno1    Anno7  Anno8
1           7        NULL   8
2           8        NULL   3
44          10       2      3
45          6        6      6
46          1        3      4
49          3        8      5
62          4        NULL   9
63          2        NULL   4
67          11       NULL   3
91          NULL     9      7
92          NULL     7      5
93          NULL     8      8

따라서이 입력이 주어지면 이에 대한 출력을 줄이는 코드가 필요합니다.

DocID       Anno8
44          3
45          6
46          4
49          5

처럼 Anno8 Null이 아닌 데이터가있는 유일한 열이며 Null 데이터가없는 4 개의 행만 있습니다.

도움이 되었습니까?

해결책

만약에 x 너의 data.frame (또는 matrix) 그 다음에

x[ ,apply(x, 2, function(z) !any(is.na(z)))]

예제가 사용되므로 NULL, is.na(·) 대체됩니다 is.null(·)

또는 당신은 볼 수 있습니다 subset(·).

다른 팁

na.omit ()를 사용하여 누락 된 행을 삭제할 수는 있지만 원하는 것은 아닙니다. 또한 현재 인정 된 답변은 잘못되었습니다. 완전한 열을 제공하지만 하나 이상의 결 측값이있는 행을 삭제하지는 않습니다. 정답은 다음과 같이 얻을 수 있습니다.

> a <- data.frame(a=c(1,2),b=c(NA,1), c=c(3,4))
> a
  a  b c
1 1 NA 3
2 2  1 4
> na.omit(a)[,colSums(is.na(a))==0]
  a c
2 2 4

위의 대답이 잘못되었는지 확인하기 위해 :

> a[ ,apply(a, 2, function(z) !any(is.na(z)))]
  a c
1 1 3
2 2 4

열 2의 NA로 인해 1 행 1을 떨어 뜨려야합니다.

a <- data.frame(a=c(1,2,0,1),b=c(NA,1,NA,1), c=c(3,4,5,1))

na.omit(a)
  a b c
2 2 1 4
4 1 1 1

a[rowSums(is.na(a))==0,]
  a b c
2 2 1 4
4 1 1 1

a[complete.cases(a),]
  a b c
2 2 1 4
4 1 1 1

또한, 당신은 그것을 사용할 수 있습니다 sqldf 도서관, if x 데이터 프레임입니다 :

library(sqldf)
result <- sqldf("SELECT DocID, Anno8 FROM x
                 WHERE Anno1 IS NOT NULL AND Anno7 IS NOT NULL")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top