R 子集二元矩阵

R 子集二元矩阵,r,stat,R,Stat,我有这个二进制的martix a0=rep(1,40) a=rep(0:1,20) b=c(rep(1,20),rep(0,20)) c0=c(rep(0,12),rep(1,28)) c1=c(rep(1,5),rep(0,35)) c2=c(rep(1,8),rep(0,32)) c3=c(rep(1,23),rep(0,17)) da=matrix(cbind(a0,a,b,c0,c1,c2,c3),nrow=40,ncol=7) 我需要将这个矩阵子集为两个子集矩阵,两个子集矩阵具有相同

我有这个二进制的martix

a0=rep(1,40)
a=rep(0:1,20)
b=c(rep(1,20),rep(0,20))
c0=c(rep(0,12),rep(1,28))
c1=c(rep(1,5),rep(0,35))
c2=c(rep(1,8),rep(0,32))
c3=c(rep(1,23),rep(0,17))
da=matrix(cbind(a0,a,b,c0,c1,c2,c3),nrow=40,ncol=7)
我需要将这个矩阵子集为两个子集矩阵,两个子集矩阵具有相同的列数和不同的行数,比如说85%对15%,但是在修剪过程中,请记住这两个子集没有共线性

我遇到的问题。 当我使用

ind <- sample(1:nrow(da), trunc(85*nrow(da)/100)) 
trda <- da[ind,] 
teda <- da[-ind,]
我得到其中一个子集不是满秩

有人能给我解释一下如何在不获得共线的情况下对它们进行子集划分吗?这只是一个例子。我在处理大矩阵


谢谢

因为行中只有0和1,所以共线行是相同的行

通过沿列粘贴来计算行字符串:

> das = apply(da,1,paste,collapse="")
> das
 [1] "1010111" "1110111" "1010111" "1110111" "1010111" "1110011" "1010011"
 [8] "1110011" "1010001" "1110001" "1010001" "1110001" "1011001" "1111001"
[15] "1011001" "1111001" "1011001" "1111001" "1011001" "1111001" "1001001"
[22] "1101001" "1001001" "1101000" "1001000" "1101000" "1001000" "1101000"
[29] "1001000" "1101000" "1001000" "1101000" "1001000" "1101000" "1001000"
[36] "1101000" "1001000" "1101000" "1001000" "1101000"
然后,快速测试是否可以完成,即是否有任何字符串出现两次以上:

> any(table(das)>2)
[1] TRUE
因为如果有两个以上的矩阵,那么其中一个矩阵将至少有两个相同的行。例如,这里有8行1001000行

要进行实际拆分(如果可以的话),只需在出现两次的每一行中选取一行并将其放入每个矩阵中,然后使用任何方法拆分其余的行


我们在这里的右边?

考虑到奇异/非奇异矩阵必须是正方形,我不知道如何将8000x900矩阵拆分为两个正方形……我不知道,因为你没有提到任何叉积。就目前情况而言,听起来像是要将一个大矩阵拆分为两个小矩阵。你说的“分开”是什么意思?对我来说,这意味着将矩阵沿一行或一列切成两段。这并不意味着获取可能不连续的行或列的子集。你真的需要编辑你的问题,也许给我们举个例子,也许是一个12x5矩阵作为例子