将TRUE/FALSE矩阵合并为一个矩阵

use*_*603 2 r

如果我有这个矩阵(我命名数据):

     [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9]
[1,] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
[2,] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
[3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
[5,] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
[6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[7,] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
[8,] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
[9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

我希望将列组合成一个列,如下所示:(行中的一个TRUE等于TRUE)

      [,1]   
 [1,] TRUE 
 [2,] TRUE 
 [3,] FALSE 
 [4,] TRUE   
 [5,] TRUE 
 [6,] FALSE  
 [7,] TRUE   
 [8,] TRUE  
 [9,] FALSE  
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一些事情(使用|):

  data2[1:9,1]<-data[,1]|data[,2]|data[,3]|data[,4]…
Run Code Online (Sandbox Code Playgroud)

然后,data2将包含一个列,其中包含不同的列.但如果我有很多列,这不是一个好方法(例如ncol = 100)

我想有一些简单的方法吗?

谢谢

flo*_*del 9

这是另一个利用R如何在逻辑和数字之间转换的答案:

当从逻辑变为数字时,FALSE变为0TRUE变为1如此rowSums给出TRUE每行的数量:

rowSums(data)
# [1] 3 3 0 3 3 0 3 3 0
Run Code Online (Sandbox Code Playgroud)

当从数字变为逻辑时,0变为FALSE,其他任何东西都是TRUE,所以你可以输出rowSumsto 的输出,as.logical它将指示一行是否至少有一个TRUE:

as.logical(rowSums(data))
# [1]  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

我喜欢Tyler的答案,它可能效率较低(待证明),但我觉得它更直观.

  • @TylerRinker,我认为更快(对我而言,也非常直观),`rowSums(data)> 0`也有效. (6认同)
  • @ flodel我把它弄好了,你的假设得到了证实.+1 (2认同)

Tyl*_*ker 5

你可以使用anyapply如下所示:

mat <- matrix(sample(c(TRUE, FALSE), 100,TRUE), 10)
apply(mat, 1, any)
Run Code Online (Sandbox Code Playgroud)