通过比较nxm矩阵和nxc矩阵(其中c <= m)创建真/假矩阵

时间:2017-08-03 19:54:40

标签: r matrix

我在R中遇到以下问题:

我有一个名为“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

接下来我有一个“nxm”矩阵,它是通过将第一列(本例中为1:10的序列)重新划分(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”之一时,显示“TRUE”。就像这样:

      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

谢谢!

2 个答案:

答案 0 :(得分:2)

我回来了:希望这会有所帮助:

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

上面的代码会比较a行中H行中的值,并在TRUE的值位于{{a时给出H 1}}。如果这不起作用,请告诉我

答案 1 :(得分: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
    }
  }
}