我在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
谢谢!
答案 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
}
}
}