我需要合并几个不同的数据帧。
一方面,我有几个带有元数据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."数据框的名称已经是列表格式(即list1和list2),并且数据框已经导入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")
发布于 2018-09-11 20:35:39
下面是一个例子,告诉你如何为你的情况构建一个可重现的例子:
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)现在,据我所知,您希望为df1a和df1b以及df2a和df2b创建一个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 https://stackoverflow.com/questions/52275521
复制相似问题