請問一下
假設我有兩個矩陣分別是
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