请问一下
假设我有两个矩阵分别是
A=matrix(c(1,12,13,1,4,16,17,4,7,7,8,7),4,3)
B=matrix(c(1,2,3,4,5,6,7,8,9),3,3)
我想要找A的每一列是否有出现在B的每一列里, 如果有就传回A的index
比如. A的第一列和第四列有出现在B, 就传回1跟4
我目前是写loop跟identical来做,
请问R有function来处理这样的问题吗?
谢谢 !
※ 编辑: wgene (123.193.67.178 台湾), 06/15/2022 02:10:37
1F:推 locka: do.call(paste0, as.data.frame(A)) %in% do.call(paste0, 06/15 07:57
2F:→ locka: as.data.frame(B)) 06/15 07:57
3F:→ locka: 把每个row的值直接paste在一起成为一个新的字串组合(ex:1,4 06/15 07:59
4F:→ locka: ,7直接变成"147")再跟B比,这样A变成("147","12167",...) B 06/15 08:01
5F:→ locka: 变成("147","258","369")这样字串比对逻辑上可少一层loop 06/15 08:03
7F:推 lycantrope: 变字串感觉会出事 matrix slice直接%in%比较省事 06/15 08:29
8F:→ Wush978: 如果是 column 相同的话,可以用 abs(B - A[1,]) 然後和 06/15 09:23
9F:→ Wush978: 0 比较来找。 06/15 09:23
10F:推 locka: (举手)想问7楼大大可能会出什麽事 哈哈 06/15 09:59
11F:→ andrew43: 同lycantrope的想法,走访各column做一个%in%。 06/15 11:25
12F:→ andrew43: 要得到index就再包一个which()即可。 06/15 11:26
13F:→ Gjerry: 直接合并成字串会有多对一的问题 e.g. 1, 23, 4 -> 1234 06/15 11:45
14F:→ Gjerry: 12, 3, 4 -> 1234 06/15 11:45
15F:→ Gjerry: 如果 A, B 都很大,每一个 row 先产生固定长度的 hash , 06/15 11:54
16F:→ Gjerry: 然後再比对也是可行的做法 06/15 11:54
17F:→ wgene: 谢谢各位 我是用2个loop加identical 再试试各位的方法 06/15 13:48
18F:→ locka: 了解,感谢13楼Gjerry大说明~那可能就是paste时再加个逗号 06/15 14:03
19F:→ locka: 之类的来解决,不过也感谢andrew43大跟lycantrope大分享的 06/15 14:03
20F:→ locka: 方法!又学到了!哈 06/15 14:03
21F:推 lycantrope: %in%应该也用hash去找值,paste字串再找有点画蛇添足 06/15 16:16
22F:推 locka: 懂~感谢提点! 06/15 16:24
23F:→ lycantrope: 原来内建match不是最佳解w,可以用fastmatch更快一些 06/15 16:54
25F:推 locka: 感谢楼上 wayturn 大大整理~ 06/15 17:53