我有一个字符矩阵
B = matrix(
c("foo", "--", "bam", "pop", "--", "foo","--","fizz"),
nrow=2,
ncol=4)
缺少数据由" - "表示。我试图编写一个for循环,在每列中得到" - "''''如果" - "的分数在该列中>> = .5然后我想将该列索引存储在名为bad_columns
的单独向量中。在这个矩阵中,第一列有一个" - " .5的分数,第二列有一个" - "分数为0.
同样对于矩阵的行,我试图获得" - "的分数。在每一行。如果" - "的分数在行中是> = .5然后我想将该行索引存储在一个名为bad_rows
的单独向量中。
答案 0 :(得分: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
答案 1 :(得分:3)
colSums功能非常快:
colSum(B == “ - ”)/ nrow(B)
> badcols <- which( colSums(B=="--")/nrow(B) >= 0.5 )
> badcols
[1] 1 3 4
当然,还有一个rowSums
功能。