根据项目名称连接两个列表的项目

Joining items of two lists based on item names

我有两个列表,每个列表都包含几个数据帧,但顺序不同。列表 1 具有基因表达值,列表 2 具有聚类中的基因成员。我想根据项目名称执行内部联接,但如何避免这样做而不必专门 运行 每个内部联接分别?

lst1 <- list(Df1, Df2, Df3)

lst2 <- list(Df2, Df3, Df1)

我想避免的代码:

gene_cluster[["Df1"]] <-  lst1[["Df1"]] %>% 
  inner_join(lst2[["Df1"]] , by = "gene_name") 

gene_cluster[["Df2"]] <-  lst1[["Df2"]] %>% 
  inner_join(lst2[["Df2"]] , by = "gene_name") 

gene_cluster[["Df3"]] <-  lst1[["Df3"]] %>% 
  inner_join(lst2[["Df3"]] , by = "gene_name") 

谢谢!

下面应该做你想做的。我们首先用每个数据框的名称命名每个列表的元素,然后按名称对两个列表进行排序,我们使用 purrr::map2 进行迭代,执行内部连接。

library(purrr)

lst1 <- list(Df1, Df2, Df3)
lst2 <- list(Df2, Df3, Df1)

names(lst1) <- c("Df1", "Df2", "Df3")
names(lst2) <- c("Df2", "Df3", "Df1")

map2(lst1[order(names(lst1))], lst2[order(names(lst2))], 
     ~ inner_join(.x, .y, by = "gene_name") )