如果我有这个矩阵(我命名数据):
[,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)
我想有一些简单的方法吗?
谢谢
这是另一个利用R如何在逻辑和数字之间转换的答案:
当从逻辑变为数字时,FALSE
变为0
并TRUE
变为1
如此rowSums
给出TRUE
每行的数量:
rowSums(data)
# [1] 3 3 0 3 3 0 3 3 0
Run Code Online (Sandbox Code Playgroud)
当从数字变为逻辑时,0
变为FALSE
,其他任何东西都是TRUE
,所以你可以输出rowSums
to 的输出,as.logical
它将指示一行是否至少有一个TRUE
:
as.logical(rowSums(data))
# [1] TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
我喜欢Tyler的答案,它可能效率较低(待证明),但我觉得它更直观.
你可以使用any
与apply
如下所示:
mat <- matrix(sample(c(TRUE, FALSE), 100,TRUE), 10)
apply(mat, 1, any)
Run Code Online (Sandbox Code Playgroud)