2014-09-13 48 views
1

我有一个矩阵,其中的条目是数字0,1,2或3.我试图确定此矩阵中包含数字“ 3“两次。这里是我的代码/输出至今:R:矩阵行中特定条目的编号

> 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”出现两次。感谢您的任何建议!

+4

'测试[rowSums(测试== 3)== 2]'检查恰好两次出现3在行中。 – 2014-09-13 18:48:56

回答

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以及

+0

你是什么意思,你不能复制数据?你可以复制出'test' – 2014-09-13 21:21:10

+0

@DavidArenburg - 没关系,用soread()'很容易:-) – 2014-09-13 21:25:19

+0

'soread()'?这是阿南达写的又一个疯狂功能吗? – 2014-09-13 21:28:53