2014-11-23 63 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