看板 R_Language 關於我們 聯絡資訊
請問一下 假設我有兩個矩陣分別是 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
locka: do.call(paste0, as.data.frame(A)) %in% do.call(paste0, 06/15 07:57
locka: as.data.frame(B)) 06/15 07:57
locka: 把每個row的值直接paste在一起成為一個新的字串組合(ex:1,4 06/15 07:59
locka: ,7直接變成"147")再跟B比,這樣A變成("147","12167",...) B 06/15 08:01
locka: 變成("147","258","369")這樣字串比對邏輯上可少一層loop 06/15 08:03
locka: https://i.imgur.com/lS2FhKz.jpg 06/15 08:07
lycantrope: 變字串感覺會出事 matrix slice直接%in%比較省事 06/15 08:29
Wush978: 如果是 column 相同的話,可以用 abs(B - A[1,]) 然後和 06/15 09:23
Wush978: 0 比較來找。 06/15 09:23
locka: (舉手)想問7樓大大可能會出什麼事 哈哈 06/15 09:59
andrew43: 同lycantrope的想法,走訪各column做一個%in%。 06/15 11:25
andrew43: 要得到index就再包一個which()即可。 06/15 11:26
Gjerry: 直接合併成字串會有多對一的問題 e.g. 1, 23, 4 -> 1234 06/15 11:45
Gjerry: 12, 3, 4 -> 1234 06/15 11:45
Gjerry: 如果 A, B 都很大,每一個 row 先產生固定長度的 hash , 06/15 11:54
Gjerry: 然後再比對也是可行的做法 06/15 11:54
wgene: 謝謝各位 我是用2個loop加identical 再試試各位的方法 06/15 13:48
locka: 了解,感謝13樓Gjerry大說明~那可能就是paste時再加個逗號 06/15 14:03
locka: 之類的來解決,不過也感謝andrew43大跟lycantrope大分享的 06/15 14:03
locka: 方法!又學到了!哈 06/15 14:03
lycantrope: %in%應該也用hash去找值,paste字串再找有點畫蛇添足 06/15 16:16
locka: 懂~感謝提點! 06/15 16:24
lycantrope: 原來內建match不是最佳解w,可以用fastmatch更快一些 06/15 16:54
wayturn: 請貼到常用的IDE https://ideone.com/Ge4f6E 06/15 17:38
locka: 感謝樓上 wayturn 大大整理~ 06/15 17:53