R 动态连接多个表 问题
大家好 我正在尝试动态地将几个数据帧连接在一起。对我来说,这意味着我有一个以R 动态连接多个表 问题,r,dataframe,join,R,Dataframe,Join,大家好 我正在尝试动态地将几个数据帧连接在一起。对我来说,这意味着我有一个以df_a开始的数据帧,我想将多个其他数据帧df_B1,df_B2,df_B3等连接到该数据帧 df_A包含一列,用于每个df_B…表的联接Column\u join\u B1、Column\u join\u B2、Column\u join\u B3,等等(尽管实际上这些名称不太清楚)。这些名称也位于向量df\u a\u join\u name中 df_B1,df_B2,df_B3等。。存储在列表df_B中,我认为这是一
df_a
开始的数据帧,我想将多个其他数据帧df_B1
,df_B2
,df_B3
等连接到该数据帧
df_A
包含一列,用于每个df_B…
表的联接Column\u join\u B1
、Column\u join\u B2
、Column\u join\u B3
,等等(尽管实际上这些名称不太清楚)。这些名称也位于向量df\u a\u join\u name
中
df_B1
,df_B2
,df_B3
等。。存储在列表df_B
中,我认为这是一种很好的做法:)。这也是我在循环中访问它们的方式
每一个都有两列。其中一个具有要根据df_A
连接的值,另一个具有信息
我甚至尝试在加入之前重命名第一列以匹配df_A
中的列,但没有成功
我在尝试什么
left\u join()
不允许我简单地使用by=c(df\u A\u join\u names[1],“Column\u join\u A”)
,因此我必须使用setNames
,但我无法实现这一点
下面是我想在循环中迭代的函数:
my_join <- function(df_a, df_b, a_name, b_name){
df_joined <- left_join(df_a, df_b,
by = setNames(b_name, a_name))
return(df_joined)
}
运行此命令,我得到:
Error in UseMethod("tbl_vars") :
no applicable method for 'tbl_vars' applied to an object of class "list"
一些可以玩的东西
#使DFU成为
你非常接近!唯一需要更改的是引用列表df_B下的数据帧的方式。df_B[1]仍然是一个列表,df_B[[1]]将返回一个数据帧。我运行了下面的代码,它对我有效
for (i in 1: length(df_A_join_names)){
df_A <- my_join(df_a = df_A,
df_b = df_B[[i]],
a_name = as.character(df_A_join_names[i]),
b_name = "Column_join_A"
)
}
for(i in 1:长度(df_A_join_name)){
df_A无需构建特定函数,只需在left_join函数中使用集合名即可:
df_B_join_name <- "Column_join_A"
for (i in 1: length(df_A_join_names)){
df_A <- left_join(df_A, df_B[[i]], by=c(setNames(nm = df_A_join_names[i], df_B_join_name)))
}
df_B_join_name首先,设法重命名df_B
中的第一列,以匹配df_A
中的列。因此df_B
将如下所示:
# [[1]]
# Column_join_B1 B_a
# 1 11 A
# 2 12 B
# . . .
# . . .
# . . .
#
# [[2]]
# Column_join_B2 B_b
# 1 21 K
# 2 22 L
# . . .
# . . .
# . . .
接下来,使用base
中的Reduce()
或purr
中的Reduce()
来迭代左join
的操作。您甚至不需要使用for循环
Reduce(left_join, df_B, init = df_A)
# A_a Column_join_B1 Column_join_B2 B_a B_b
# 1 1 11 21 A K
# 2 2 12 22 B L
# 3 3 13 23 C M
# 4 4 14 24 D N
# 5 5 15 25 E O
# 6 6 16 26 F P
# 7 7 17 27 G Q
# 8 8 18 28 H R
# 9 9 19 29 I S
# 10 10 20 30 J T
您想将df_B
中的所有数据集加入df_A
以生成一个新数据吗?还是将df_B
中的每个数据集分别加入df_A
以获得多个数据?我想将df_B
中的所有数据集加入df_A
以获得一个数据帧。
# [[1]]
# Column_join_B1 B_a
# 1 11 A
# 2 12 B
# . . .
# . . .
# . . .
#
# [[2]]
# Column_join_B2 B_b
# 1 21 K
# 2 22 L
# . . .
# . . .
# . . .
Reduce(left_join, df_B, init = df_A)
# A_a Column_join_B1 Column_join_B2 B_a B_b
# 1 1 11 21 A K
# 2 2 12 22 B L
# 3 3 13 23 C M
# 4 4 14 24 D N
# 5 5 15 25 E O
# 6 6 16 26 F P
# 7 7 17 27 G Q
# 8 8 18 28 H R
# 9 9 19 29 I S
# 10 10 20 30 J T