【发布时间】:2019-11-14 14:40:22
【问题描述】:
问题
大家好,
我正在尝试动态地将几个数据框连接在一起。对我来说,这意味着我有一个以df_A 开头的数据框,我想加入多个其他数据框df_B1、df_B2、df_B3 等。
df_A 包含每个 df_B... 表要加入的列。 Column_join_B1、Column_join_B2、Column_join_B3 等(尽管实际上这些名称不详)。这些名称也在向量中df_A_join_names。
df_B1、df_B2、df_B3 等都存储在列表df_B 中,我知道这是一个很好的做法:)。这也是我在循环中访问它们的方式。
每一个都有两列。一个具有加入 df_A 的价值,另一个具有信息。
我什至尝试重命名第一列以匹配加入前df_A 中的列,但无济于事。
我正在尝试什么
left_join() 不允许我简单地使用by = c(df_A_join_names[1], "Column_join_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)
}
我想在循环中使用这个函数来加入我所有的df_B... 数据帧和df_A。
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"
)
}
运行这个我得到:
Error in UseMethod("tbl_vars") :
no applicable method for 'tbl_vars' applied to an object of class "list"
一些可以玩的东西
#Making df_A
A_a <- seq(1,10, by = 1)
Column_join_B1 <- seq(11,20, by = 1)
Column_join_B2 <- seq(21,30, by = 1)
df_A <- data.frame(cbind(A_a, Column_join_B1, Column_join_B2) )
#Making df_B
Column_join_A <- seq(11,20, by = 1)
B_a <- LETTERS[1:10]
df_B1 <- data.frame(Column_join_A, B_a )
Column_join_A <- seq(21,30, by = 1)
B_b <- LETTERS[11:20]
df_B2 <- data.frame(Column_join_A, B_b)
# In my own code I make this using a loop. maybe not the prettiest.
df_B <- list()
df_B[[1]] <- df_B1
df_B[[2]] <- df_B2
df_A_join_names <- c("Column_join_B1", "Column_join_B2")
参考文献
我正在尝试应用这个:
Dplyr join on by=(a = b), where a and b are variables containing strings?
我很想听听你们的想法!
【问题讨论】:
-
是否要将
df_B中的所有数据集加入df_A以生成一个新数据?或者将df_B中的每个数据集分别加入df_A得到多个数据? -
我希望将
df_B中的所有数据集加入到df_A以获得一个数据帧。