2012-08-05 35 views
1

如果我有這個矩陣(我命名的數據):的TRUE/FALSE的矩陣組合成一個

 [,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 

而且我希望將列合併成一個單一的列是這樣的:(其中一個TRUE在行等於TRUE)

 [,1] 
[1,] TRUE 
[2,] TRUE 
[3,] FALSE 
[4,] TRUE 
[5,] TRUE 
[6,] FALSE 
[7,] TRUE 
[8,] TRUE 
[9,] FALSE 

我知道我可以做這樣的事情(使用|):

data2[1:9,1]<-data[,1]|data[,2]|data[,3]|data[,4]… 

數據2然後將含有單列與不同列組合。但是這不是一個好方法,如果我有很多列(例如ncol = 100)

我想有一些簡單的方法呢?

感謝

回答

4

你可以使用anyapply爲:

mat <- matrix(sample(c(TRUE, FALSE), 100,TRUE), 10) 
apply(mat, 1, any) 
8

這裏是另一個答案是採取的[R邏輯值和數字之間如何轉換的優勢:

當從邏輯去數字,FALSE變成0TRUE變成1所以rowSums給你的數字TRUE每行:

rowSums(data) 
# [1] 3 3 0 3 3 0 3 3 0 

當從數字邏輯下去,0變得FALSE,別的是TRUE,這樣你就可以的rowSums輸出喂as.logical,這將表明,如果一排至少有一個TRUE

as.logical(rowSums(data)) 
# [1] TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE 

雖然我喜歡泰勒的回答,但效率可能不高(待證明),但我覺得它更直觀。

+1

@ flodel我改變了它,你的假設得到證實。 +1 – 2012-08-05 17:22:29

+5

@TylerRinker,我認爲甚至更快(對我來說也很直觀),'rowSums(data)> 0'也可以。 – A5C1D2H2I1M1N2O1R2T1 2012-08-05 19:20:55