-3

私はこのバイナリマルティクスを持っています

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%) を持つ 2 つのサブセット (マトリックス) にサブセット化する必要がありますが、トリム中に、2 つのサブセットには共線性がないことに注意してください。

私が抱えている問題。を使用してdaをサブセット化すると

ind <- sample(1:nrow(da), trunc(85*nrow(da)/100)) 
trda <- da[ind,] 
teda <- da[-ind,]

フルランクではなく、これらのサブセットの1つを取得します。

共線性を得ることなくそれらをサブセット化する方法を誰かが私に説明できますか? これはほんの一例です。私は大きなマトリックスを扱っています

ありがとう

4

1 に答える 1

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"

次に、実行できるかどうかの簡単なテストは、文字列が 2 回以上表示されるかどうかです。

> any(table(das)>2)
[1] TRUE

2つ以上ある場合、マトリックスの1つに同じ行が少なくとも2つあるためです。たとえば、ここには 8 つの 1001000 行があります。

実行できる場合に実際の分割を行うには、2 回表示される各行の 1 つを取得し、それらを各マトリックスに配置し、残りを任意の方法で分割する必要があります。

私たちはここで正しい線にいますか?

于 2012-09-10T09:29:56.733 に答える