2014-11-23 64 views
-1

我有一個字符矩陣如何統計矩陣中的缺失數據?

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

缺失的數據被表示爲 「 - 」。我試圖編寫一個for循環,在每一列中獲得「 - 」的小數部分。如果該列中「 - 」的分數大於等於5,那麼我想將該列索引存儲在稱爲bad_columns的單獨向量中。在此矩陣中,第一列的「 - 」分數爲.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)'爲你劃分的。 – 2014-11-23 03:20:28

+1

是的,你可以做'colMeans(B ==「 - 」)> 0.5' – 2014-11-23 03:45:09

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