2017-08-03 82 views
0

我有R中的下列問題:由N×M矩陣和NXC矩陣比較創建真/假矩陣(其中,c <= M)

我有一個名爲「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] [,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 

接着我具有由reapeating第一列(1:10在此序列創建的「n×m個」矩陣例如)「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 

現在,我想的是,這兩個比較,然後顯示「真」時,從「H」之間的數值。的一個數據幀如果不是,則爲「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

你在比較什麼是想出真/假陳述?/仇對了,例如,輸出矩陣中的最後三個真值,你比較什麼來得到它們?還有,你輸出矩陣中的第一個真值和它下面的False值,你比較什麼來獲得它們?只要給出一個可視化圖像,以便可以看到你正在比較的內容 – Onyambu

+0

對於我想比較的輸出的第一行: H矩陣第一行的「1 0 0」與第一行具有「1 2 3 4 5 6 7 8 9 10」的「a」矩陣。 然後在「1」位於「a」矩陣上獲得TRUE。我希望這會有所幫助 –

+0

這是一個閃光點。如果你能詳細說明更多斜紋更好。你已經比較了第1行和第1行你的輸出矩陣的最後一行是什麼?請解釋第一個值爲假,第二個值爲假,最後兩個值爲真。謝謝 – 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 
    } 
    } 
}