Re: [問題] 比對兩個list

看板R_Language作者 (天)時間10年前 (2015/11/06 00:00), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《angela79979 (mini)》之銘言: : [問題敘述]: : 有兩個list : a.list , b.list : >head(a.list) : $'1' : [1] 3 4 5 8 15 : $'3' : [1] 2 3 6 9 12 14 : ... : >head(b.list) : $'2' : [1] 2 3 5 13 24 : $'1' : [1] 2 3 5 6 7 8 9 12 : ... : 想比較a.list和b.list中 相同編號的list的重複element個數 : 例如: : similarity<-sum(table(a.list$'1'[a.list$'1' %in% b.list$'1'])) : 欲對每一個編號的list都作去最比對 : 但使用loop卻沒辦法對a.list$'i' 或 b.list$'i'作迴圈 : 想請問有沒有其他的方法 ## data generating - assume no duplicated names and element library(magrittr) list_1 = replicate(50, rbinom(1, 15, .5) %>% sample(1:20, .) %>% sort, simplify = FALSE) %>% set_names(sample(1:50, 50) %>% as.character) list_2 = replicate(50, rbinom(1, 15, .5) %>% sample(1:20, .) %>% sort, simplify = FALSE) %>% set_names(sample(1:50, 50) %>% as.character) ## method 1 - using for intersectNames = intersect(names(list_1), names(list_2)) %>% sort similarity = vector('numeric', length(intersectNames)) %>% set_names(as.character(intersectNames)) for (i in seq_along(intersectNames)) similarity[i] = sum(list_1[[intersectNames[i]]] %in% list_2[[intersectNames[i]]]) print(head(similarity)) # 1 10 11 12 13 14 # 1 2 4 1 3 1 ## method 2 - using map2 (or mapply) library(purrr) intersectNames = intersect(names(list_1), names(list_2)) %>% sort similarity = map2(list_1[intersectNames], list_2[intersectNames], ~ sum(.x %in% .y)) %>% do.call(c, .) %>% set_names(intersectNames) print(head(similarity)) # 1 10 11 12 13 14 # 1 2 4 1 3 1 PS: 其實map2就是mapply... 只是 function(x,y) sum(x %in% y) 改成 ~ sum(.x %in% .y) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.154.163 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1446739230.A.4F1.html ※ 編輯: celestialgod (140.109.73.190), 11/06/2015 14:45:46

11/10 12:38, , 1F
method 2~~筆記..
11/10 12:38, 1F
文章代碼(AID): #1MEtqUJn (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1MEtqUJn (R_Language)