Это вариант вопроса, ранее размещенного здесь. R - Цикл, сравнивающий общие элементы между двумя иерархическими списками Я подумал, что эта проблема может привести к существенным изменениям в форме ее решения, и, следовательно, к новому сообщению.
Я хотел бы получить списокобщие элементы при сравнении двух списков, иерархически структурированные (сайты содержат группы, содержащие элементы)
Вот некоторые фиктивные данные:
site<-c('A','A','A','A','A','A','A','A','A','B','B','B','B','B','B')
group<-c('A1','A1','A2','A2','A2','A3','A3','A3','A3',
'B1','B1','B2','B2','B2','B2')
element<-c("red","orange","blue","black","white", "black","cream","yellow","purple","red","orange","blue","white","gray","salmon")
d<-cbind(site,group,element)
Суть в том, что я не хочулюбое возможное сравнение между группами, но только между сайтами.Следовательно, я организовал данные таким образом.
#first level list - by site
sitelist<-split(d, list(d$site),drop = TRUE)
#list by group
nestedlist <- lapply(sitelist, function(x) split(x, x[['group']], drop = TRUE))
Мое намерение - создать список с общим элементом для групп из двух сайтов (в моих исходных данных есть дополнительные сайты).Поэтому, если данные структурированы так:
A1 A2 A3
B1 2 0 0
B2 0 2 0
, мне нужен список элементов, появляющихся на пересечении A1 / B1 и A2 / B2.Следовательно, результат:
output
$A1-B1
[1] "red" "orange"
$A2-B2
[2] "blue" "white"
Моя попытка аналогична той, что была опубликована в предыдущем связанном вопросе, с поправками того, что я понимаю, как то, что будет работать.
t <- outer(1:length(d$A),
1:length(d$B),
FUN=function(i,j){
sapply(1:length(i),
FUN=function(x)
intersect(d$A[[i]]$element, d$B[[j]]$element) )
})
СноваЛюбая помощь очень ценится, и извинения, если это слишком похоже на вопрос.Мои попытки настроить все предложения потерпели неудачу.