gpt4 book ai didi

r - 动态连接多个表

转载 作者:行者123 更新时间:2023-12-04 14:17:34 26 4
gpt4 key购买 nike

问题

大家好

我正在尝试将一些数据帧动态地连接在一起。对我来说,这意味着我有一个以 df_A 开头的数据框,我想将多个其他数据框加入到该数据框df_B1df_B2df_B3等。

df_A 包含每个要连接的 df_B... 表的列。 Column_join_B1Column_join_B2Column_join_B3 等(尽管实际上它们的名称并不明确)。这些名称也在向量 df_A_join_names 中。

df_B1df_B2df_B3 等存储在列表 df_B 中,这是我的理解是做 :) 的好习惯。这也是我在循环中访问它们的方式。

其中每一个都有两列。一个具有加入 df_A 的值(value),另一个具有信息。

我什至尝试在连接之前重命名第一列以匹配 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?

我很想听听你们的想法!

最佳答案

不需要构建特定的函数,您可以简单地在 left_join 函数中使用 SetNames:

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)))
}

关于r - 动态连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58859351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com