2017-08-03 12 views
0

IはRで次の問題がある:n×mの行列とNXCマトリックスを比較することにより真/偽行列を作成する(ここで、C <= M)

Iにより得られた「H」という名前のマトリックスを有します。

v<-t(combn(x, 1)) 
v<-cbind(v,matrix(0,nrow(v),2)) 
y<-t(combn(x, 2)) 
y<-cbind(y,matrix(0,nrow(y),1)) 
z<-t(combn(x, 3)) 

H<-rbind(v,y,z) 
タイトルから「NXC」行列であろう

:私は最初の列(この中で1:10の配列をreapeatingによって作成された「n×mの」マトリックスを有する

 [,1] [,2] [,3] 
[1,] 1 0 0 
[2,] 2 0 0 
[3,] 3 0 0 
[4,] 4 0 0 
[5,] 5 0 0 
[6,] 6 0 0 
[7,] 7 0 0 
[8,] 8 0 0 
[9,] 9 0 0 
[10,] 10 0 0 
[11,] 1 2 0 
[12,] 1 3 0 
[13,] 1 4 0 

次に例) "n"回(Hの行に基づく)。

与えるだろう
x = c(1:10) 
c<-as.data.frame(t(x)) 
a<-as.data.frame(c[rep(seq_len(nrow(c)), each=nrow(H)),]) 

 V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 
1  1 2 3 4 5 6 7 8 9 10 
1.1 1 2 3 4 5 6 7 8 9 10 
1.2 1 2 3 4 5 6 7 8 9 10 
1.3 1 2 3 4 5 6 7 8 9 10 
1.4 1 2 3 4 5 6 7 8 9 10 
1.5 1 2 3 4 5 6 7 8 9 10 
1.6 1 2 3 4 5 6 7 8 9 10 

さて、私が取得したいことは、これらの2を比較し、「H」からの数のいずれかであるときに「TRUE」を示すデータフレームであります"a"と "FALSE"の列でなければ、ちょうどこのように:

 V1  V2  V3  V4  V5  V6  V7  V8  V9  V10 
1  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
1.1 FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
. 
. 
. 
1.n FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE 

ありがとう!

+0

偽の例文はどのように比較していますか?/敵の例、出力行列の最後の3つの真の値。また、出力行列の最初の真の値とその下のFalse値は、それらを得るために何を比較しましたか?あなたが比較しているものを見ることができるように視覚化してください – Onyambu

+0

私が比較したい出力の最初の行について: H行列の最初の行の "1 0 0" 「1 2 3 4 5 6 7 8 9 10」を有する「a」マトリックス。 その後、 "a"マトリックスに "1"があるTRUEを取得します。私はこれが助けることを願っています –

+0

それはglipseです。あなたがもっとうまくいくように精巧にすることができればお願いします。 '行1 'と'行1'を比較して、出力行列の最後の行を探しましたか?偽である最初の値、偽である2番目の値、真である最後の2つの値を説明してください。ありがとうございます – Onyambu

答えて

1

はバックアム:これが役立つことを願っています:

t(mapply("%in%",data.frame(t(a)),data.frame(t(H)))) 

上記のコードはaその行の値を比較Hの行にあり、aの値がHの場合はTRUEとなります。これがうまくいかない場合私に知らせてください

+0

あなたはそれをしました! Thnx! –

+0

ありがとうございます。問題の横たわっている構造を理解すると、それを解決するのが容易になります。どういたしまして。あなた自身を説明できることに感謝します。あなたが援助を必要としていたとしても、あなたを悩ませて申し訳ありません。すべてがあなたとうまくいくことを願っています。ありがとうございました – Onyambu

0

多分これは、(Bが欲しかったデータフレームである)ことができます:

b <- data.frame() 

for (j in 1:nrow(a)){ 
    common = intersect(H[j,],a[j,]) 
    for (i in a[j,]) 
    { 
    if (i %in% common){ 
     b[j,i]<- T 
    } 
    else 
    { 
     b[j,i]<- F 
    } 
    } 
} 
関連する問題