2014-11-23 8 views
-1

나는매트릭스에서 누락 된 데이터를 계산하는 방법은 무엇입니까? "-"

B = matrix( 
    c("foo", "--", "bam", "pop", "--", "foo","--","fizz"), 
    nrow=2, 
    ncol=4) 

누락 된 데이터로 표시되는 문자 매트릭스를 가지고있다. 나는 각 열에 "-"의 부분을 얻는 for 루프를 작성하려고합니다. 해당 열의 "-"부분이> = 0.5 인 경우 해당 열 인덱스를 bad_columns이라는 별도 벡터에 저장하려고합니다. 이 행렬에서 첫 번째 열은 0.5의 "-"분수를 가지며 두 번째 열은 0의 "-"분수를 갖습니다.

마찬가지로 행의 행에 대해 분수를 구합니다. "-"각 행에. 행의 "-"부분이> = .5 인 경우 해당 행 인덱스를 bad_rows이라는 별도의 벡터에 저장하려고합니다.

답변

3

colSums 기능은 매우 빠르고 :

colSum (B == "-")/nrow (B)

> badcols <- which(colSums(B=="--")/nrow(B) >= 0.5) 
> badcols 
[1] 1 3 4 

또한, 물론, rowSums 기능이 있습니다 .

+1

'rowMeans'와'colMeans'는 당신을 위해'nrow (B)'와'ncol (B)'에 의한 나눗셈을합니다. –

+1

예,'colMeans (B == "-")> 0.5'를 할 수있었습니다. –

3

이것은 행/열에 대한 작업을 수행하는 행렬과 함께 apply() 함수의 꽤 표준적인 사용법입니다. ?apply 도움말 페이지를 읽으십시오. 그런 다음 which()을 사용하여 기준과 일치하는 값의 색인을 가져옵니다.

bad_columns <- which(apply(B, 2, function(x) mean(x=="--")) >= .5) 
bad_rows <- which(apply(B, 1, function(x) mean(x=="--")) >= .5) 

bad_columns 
# [1] 1 3 4 
bad_rows 
# [1] 1 
관련 문제