2017-06-16 85 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