从矩阵中提取最大的独立列集

ali*_*boy 3 r matrix

我有一个看起来像这样的矩阵:

 1 1 1 1 1 1 1 1 1  1  1  1
 1 1 1 1 1 1 0 0 0  0  0  0
 0 0 1 1 0 0 0 0 1  1  0  0
 1 1 0 0 0 0 1 1 0  0  0  0
 0 0 1 1 0 0 0 0 0  0  0  0
 1 1 0 0 0 0 0 0 0  0  0  0
Run Code Online (Sandbox Code Playgroud)

您可以看到每两列是相同的,表示设计矩阵的"组成员资格".现在我的问题是,如何在R中自动将这个等级缺陷矩阵(rank = 6)转换为满秩矩阵?这种情况可能有点特殊,即我可以手动删除重复的列.我只是好奇是否有一种方法能够"更普遍地"解决问题.谢谢!

edd*_*ddi 10

我认为R对QR进行分解的方式是有效的(并且通过工作我的意思是留下一组独立的列):

m[, qr(m)$pivot[seq_len(qr(m)$rank)]]
Run Code Online (Sandbox Code Playgroud)

关于OP的例子:

m = structure(c(1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 
1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 
0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L), .Dim = c(6L, 12L
))

m[, qr(m)$pivot[seq_len(qr(m)$rank)]]
#     [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]    1    1    1    1    1    1
#[2,]    1    1    1    0    0    0
#[3,]    0    1    0    0    1    0
#[4,]    1    0    0    1    0    0
#[5,]    0    1    0    0    0    0
#[6,]    1    0    0    0    0    0
Run Code Online (Sandbox Code Playgroud)