根据项目名称连接两个列表的项目
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") )
我有两个列表,每个列表都包含几个数据帧,但顺序不同。列表 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") )