[問題] 比較兩個矩陣的每一列

看板R_Language作者時間1年前 (2022/06/15 01:04), 1年前編輯推噓7(7018)
留言25則, 7人參與, 1年前最新討論串1/1
請問一下 假設我有兩個矩陣分別是 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

06/15 07:57, 1年前 , 1F
do.call(paste0, as.data.frame(A)) %in% do.call(paste0,
06/15 07:57, 1F

06/15 07:57, 1年前 , 2F
as.data.frame(B))
06/15 07:57, 2F

06/15 07:59, 1年前 , 3F
把每個row的值直接paste在一起成為一個新的字串組合(ex:1,4
06/15 07:59, 3F

06/15 08:01, 1年前 , 4F
,7直接變成"147")再跟B比,這樣A變成("147","12167",...) B
06/15 08:01, 4F

06/15 08:03, 1年前 , 5F
變成("147","258","369")這樣字串比對邏輯上可少一層loop
06/15 08:03, 5F

06/15 08:07, 1年前 , 6F

06/15 08:29, 1年前 , 7F
變字串感覺會出事 matrix slice直接%in%比較省事
06/15 08:29, 7F

06/15 09:23, 1年前 , 8F
如果是 column 相同的話,可以用 abs(B - A[1,]) 然後和
06/15 09:23, 8F

06/15 09:23, 1年前 , 9F
0 比較來找。
06/15 09:23, 9F

06/15 09:59, 1年前 , 10F
(舉手)想問7樓大大可能會出什麼事 哈哈
06/15 09:59, 10F

06/15 11:25, 1年前 , 11F
同lycantrope的想法,走訪各column做一個%in%。
06/15 11:25, 11F

06/15 11:26, 1年前 , 12F
要得到index就再包一個which()即可。
06/15 11:26, 12F

06/15 11:45, 1年前 , 13F
直接合併成字串會有多對一的問題 e.g. 1, 23, 4 -> 1234
06/15 11:45, 13F

06/15 11:45, 1年前 , 14F
12, 3, 4 -> 1234
06/15 11:45, 14F

06/15 11:54, 1年前 , 15F
如果 A, B 都很大,每一個 row 先產生固定長度的 hash ,
06/15 11:54, 15F

06/15 11:54, 1年前 , 16F
然後再比對也是可行的做法
06/15 11:54, 16F

06/15 13:48, 1年前 , 17F
謝謝各位 我是用2個loop加identical 再試試各位的方法
06/15 13:48, 17F

06/15 14:03, 1年前 , 18F
了解,感謝13樓Gjerry大說明~那可能就是paste時再加個逗號
06/15 14:03, 18F

06/15 14:03, 1年前 , 19F
之類的來解決,不過也感謝andrew43大跟lycantrope大分享的
06/15 14:03, 19F

06/15 14:03, 1年前 , 20F
方法!又學到了!哈
06/15 14:03, 20F

06/15 16:16, 1年前 , 21F
%in%應該也用hash去找值,paste字串再找有點畫蛇添足
06/15 16:16, 21F

06/15 16:24, 1年前 , 22F
懂~感謝提點!
06/15 16:24, 22F

06/15 16:54, 1年前 , 23F
原來內建match不是最佳解w,可以用fastmatch更快一些
06/15 16:54, 23F

06/15 17:38, 1年前 , 24F
請貼到常用的IDE https://ideone.com/Ge4f6E
06/15 17:38, 24F

06/15 17:53, 1年前 , 25F
感謝樓上 wayturn 大大整理~
06/15 17:53, 25F
文章代碼(AID): #1YgB-V48 (R_Language)
文章代碼(AID): #1YgB-V48 (R_Language)