我有一个矩阵,其中的条目是数字0,1,2或3.我试图确定此矩阵中包含数字“3”两次的行数。到目前为止,这是我的代码/输出:
> test <-replicate(100, sample(0:3, 7, replace=T))
> test <- t(test)
> test <- subset(test, rowSums(test)==7)
> test
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0 3 1 0 3 0 0
[2,] 0 0 1 2 2 0 2
[3,] 1 0 0 2 0 3 1
[4,] 0 1 2 3 1 0 0
[5,] 1 1 1 3 1 0 0
[6,] 3 0 0 0 2 1 1
因此,例如,第1行包含数字“3”两次,但我想浏览整个矩阵并检查每一行以查看“3”是否出现两次。谢谢你的建议!
答案 0 :(得分:1)
发表评论作为回答此问题的答案。
好像你想要
test[rowSums(test == 3) == 2, ]
对于您的示例数据,您需要drop = FALSE
,因为只有一行,其中3个恰好出现两次。否则,R会将一行矩阵向下拖动到一个向量。
test[rowSums(test == 3) == 2, , drop = FALSE]
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,] 0 3 1 0 3 0 0
为安全起见,您可能还想在实际数据中使用drop = FALSE