楼主: 416171205
4778 13

[问答] 如何比较一个矩阵每行是不是另一个矩阵每行的子集? [推广有奖]

11
jmpamao 发表于 2013-1-6 00:27:25
如果把a <- array(1:24, c(2,3,4))
比作一个长方体
那么此时是dim=(2,3,4)
,,1
。。。
,,2
。。。
,,3
。。。
,,4
如果把这个长方体,翻个个头,并没有改变 xyz的定位
比如dim=c(3,4,2)
,,1
。。。
,,2
。。。
此时又如何来实现这个转换呢?如果能实现了话,就能很方便解决数据提取的问题了a[,,1]

12
jmpamao 发表于 2013-1-6 12:20:41
知道怎么转变了, 呵呵,那个长方体真好理解
> a <- array(1:24, dim=c(2,3,4))
> a
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 3

     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

如果这个长方体的空间结构标定不变,要转变为 dim=c(3,4,2)

apply(a,c(3,1),function(x)x[])
, , 1     
        [,1] [,2] [,3] [,4]
[1,]    1    7   13   19
[2,]    3    9   15   21
[3,]    5   11   17   23
, , 2   
        [,1] [,2] [,3] [,4]
[1,]    2    8   14   20
[2,]    4   10   16   22
[3,]    6   12   18   24
这样就很方便 数据的提取了。
或者
apply(a,1,function(x)x[])#简单的矩阵

。。。。c(3,1)  c(1,2),c(2,3) ...还是有点难理解空间结构!

13
jmpamao 发表于 2013-1-7 23:35:18
为了你这个题, 我至少关注了4个夜晚。尝试出怎么不用循环来做着个题了。呵呵
先谢谢qoiqpwqr 兄——我R导师  的指导。


A=read.table(text="
1 2
3 4
5 6
4 6
",header=F)
B=read.table(text="
2 4 5 6
3 2 4 6
             ",header=F)
#查看A的行在B行中,是否包含
#AB的行为B的行,AB的列为A的行


AB <- apply(A,1,function(x){
  apply(B,1,function(i)(all(x%in%i)))
}
);AB  
apply(AB,2,sum) #向量的方式, 0不包含, >0表示包含,数值表示包含的个数

已有 2 人评分学术水平 热心指数 信用等级 收起 理由
416171205 + 1 + 1 + 1 太谢谢啦!!!!!
qoiqpwqr + 1 + 1 + 1 分析的有道理

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

14
ntsean 发表于 2013-1-8 06:13:35
可以是可以的, 只是不知道比你的循环效率提高多少

A <- matrix(1:6, ncol=2, byrow=T)
B <- matrix(c(1,3,4,2,5,4,6,6), nrow=2)

t(apply(A, 1, function(x) apply(B, 1, function(y) all(x %in%y ))))
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
416171205 + 1 + 1 + 1 谢谢谢谢!!!

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 09:29