Получить общие элементы из подмножеств списка в R - PullRequest
0 голосов
/ 06 июля 2018

Моя структура данных выглядит следующим образом:

listA
[[1]]
1 2 4 5 6 8 9 10 12 24
[[2]]
4 8 9 12 26 35 46

listB
[[1]]
5 8 10 12 24 35 42 56 
[[2]]
26 35 46 59 68 72

Я хочу, чтобы количество общих элементов из соответствующих подмножеств обоих списков было сохранено в отдельном списке

Я ожидаю следующего результата "

list_AB
[[1]]
5         #No. of common elements between listA [[1]] and listB[[1]]
[[2]]     #No. of Common elements between listA [[2]] and listB[[2]]
3

Я написал следующий код, чтобы получить ответ, но он был бесполезен:

k<-c(1:2)
for (i in k){
for (j in 1:length(listA)){
for (k in 1:length(listB)){
intersect_G[[i]]<-intersect(listA[[j]],listB[[k]])}}}

Ответы [ 2 ]

0 голосов
/ 06 июля 2018
#Create data
A <- list(seq(1:10), seq(10,20,2))
B <- list(seq(1:5), seq(100,110,2))

#Unlist both lists and check to see which elements are shared. 
new_list <- list(intersect(unlist(A), unlist(B)))
new_list
[[1]]
[1] 1 2 3 4 5
0 голосов
/ 06 июля 2018

На основе описания поиска общих элементов между соответствующими элементами «listA» и «listB» и получения length каждого

lst <- Map(intersect, listA, listB))
lengths(lst)
#[1] 5 3

Или используя pmap из purrr

library(tidyverse)
pmap(list(listA, listB), ~ intersect(..1, ..2) %>%
                                        length) 

Или используя for loop

out <- vector('list', length(listA))
for(i in seq_along(listA)) out[[i]] <- length(intersect(listA[[i]], listB[[i]]))

Или используя purrr

library(purrr)
map2(listA, listB, ~ length(intersect(.x, .y)))
#[[1]]
#[1] 5

#[[2]]
#[1] 3

Данные

listA <- list(c(1, 2, 4, 5, 6, 8, 9, 10, 12, 24), c(4, 8, 9, 12, 26, 35, 
46))

listB <- list(c(5, 8, 10, 12, 24, 35, 42, 56), c(26, 35, 46, 59, 68, 72
))

данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...