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时列的名称/名称。
我该怎么办?
我遇到问题;我想创建一个从结构这样的二元矩阵开始一个新的矩阵:在二进制矩阵中提取值为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时列的名称/名称。
我该怎么办?
试试这个地方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 = "")))
我测试了一个dim'1e + 5 x 100'矩阵所用的时间,第一种方法要快得多。 – 989
参见[这个类似的职位(https://开头计算器.com/questions/36304404/create-a-new-column-with-non-null-columns-names) –