R dplyr - 循环数据帧列表 %>% 左联接 %>% 多个数据帧



我需要合并几个不同的数据帧。

一方面,我有几个带有元数据A的数据框,另一方面,B各自的信息框。

A.
[1] "LOJun_Meta" "LOMay_Meta" "VOJul_Meta" "VOJun_Meta" "VOMay_Meta" "ZOJun_Meta"
[7] "ZOMay_Meta"
B.
[1] "LOJun_All." "LOMay_all." "VOJul_All." "VOJun_all." "VOMay_all." "ZOJun_all."
[7] "ZOMay_all."

数据框的名称已采用列表格式(即list1list2(,数据框已在 R 中导入。

我的目标是创建一个循环,该循环将合并dplyr > left-join相应的数据帧。例如:

LOJun_Meta + LOJun_All; LoMay_Meta + LOJun_all etc...

我很难做的是创建将"同步"合并"过程的循环。

我不确定我是否应该创建一个具有两个输入并执行此类"合并"的函数。

它会像

merging(list1, list2){
for i in length(list):
left_join(list1[i], list[2], by = c("PrimaryKey" = "ForeignKey"))
}

我认为问题是该函数应该引用的数据框,这些数据框不是list1 & list2值,而是存储在list1 & list2中的数据框名称。

有什么想法吗?

多谢!干杯

下面显示了我打算实现的目标的图表:

[循环图 - dplyr/多个数据帧1

我热衷于自动化的一个例子是此操作:ZOMay<- left_join(ZOMay_Meta, ZOMay_all., by = c("Primary Key" = "Foreign key")) ZOJun<- left_join(ZOJun_Meta, ZOJun_all., by = c("Primary Key" = "Foreign Key")) write.csv(ZOMay, file = "ZOMay_Consolidated.csv") write.csv(ZOMay, file = "ZOJun_Consolidated.csv")

下面是如何为您的情况构建可重现示例的示例:

library(tidyverse)
df1a <- data_frame(id = 1:3, var1 = LETTERS[1:3])
df2a <- data_frame(id = 1:3, var1 = LETTERS[4:6])
df1b <- data_frame(id = 1:3, var2 = LETTERS[7:9])
df2b <- data_frame(id = 1:3, var2 = LETTERS[10:12])
list1 <- list(df1a, df2a)
list2 <- list(df1b, df2b)

现在据我了解,您想为df1adf1b以及df2adf2b做一个left_join.您可以使用purrr包中的map2,而不是循环。这将遍历两个列表,并将一个函数应用于每对元素。

map2(list1, list2, left_join)
# [[1]]
# # A tibble: 3 x 3
#        id var1  var2 
#     <int> <chr> <chr>
#   1     1 A     G    
#   2     2 B     H    
#   3     3 C     I    
# 
# [[2]]
# # A tibble: 3 x 3
#        id var1  var2 
#     <int> <chr> <chr>
#   1     1 D     J    
#   2     2 E     K    
#   3     3 F     L 

最新更新