2017-06-16 59 views
2

我遇到問題;我想創建一個從結構這樣的二元矩陣開始一個新的矩陣:在二進制矩陣中提取值爲1的列名稱

A B C D E F 
G 0 0 1 1 0 0 
H 0 0 0 1 1 0 
I 0 0 0 0 1 0 
L 1 1 0 0 0 0 

我想創建由開始一排名稱做了新的矩陣,和一個新的和獨特的柱,稱爲X,每行包含每次對應矩陣數爲1時列的名稱/名稱。

我該怎麼辦?

+0

參見[這個類似的職位(https://開頭計算器.com/questions/36304404/create-a-new-column-with-non-null-columns-names) –

回答

1

試試這個地方m是你的矩陣:

as.matrix(apply(m==1,1,function(a) paste0(colnames(m)[a], collapse = ""))) 

# [,1] 
#G "CD" 
#H "DE" 
#I "E" 
#L "AB" 

另一種選擇其中可能是更快,如果m很大:

t <- which(m==1, arr.ind = TRUE) 
as.matrix(aggregate(col~row, cbind(row=rownames(t), col=t[,2]), function(x) 
                paste0(colnames(m)[x], collapse = ""))) 
+0

我測試了一個dim'1e + 5 x 100'矩陣所用的時間,第一種方法要快得多。 – 989