r - 动态连接多个表
问题描述
问题
大家好,
我正在尝试动态地将几个数据框连接在一起。对我来说,这意味着我有一个数据框,df_A
我想加入多个其他数据框df_B1
,df_B2
等等df_B3
。
df_A
包含df_B...
要连接的每个表的列。Column_join_B1
, Column_join_B2
, Column_join_B3
, 等(尽管实际上这些名称不明确)。这些名称也在 vector 中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),其中a和b是包含字符串的变量?
我很想听听你们的想法!
解决方案
首先,设法重命名 in 中的第一列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
# . . .
# . . .
# . . .
接下来,使用Reduce()
inbase
或reduce()
inpurrr
来迭代left_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
推荐阅读
- jquery - jQuery | 如何复制输入内容?
- android - 将 RelativeLayout 更改为 ScrollView
- docker - 从 pod 内部访问 Kubernetes pod 的日志文件?
- hex - 索引记录之间的最后一个索引条目,但资源管理器仍然能够显示所有文件
- react-native - 渲染无状态组件时出错:“找不到变量:React”
- java - 带有弹簧上下文的测试方法模拟
- apache-karaf - 卡拉夫没有启动
- javascript - 如何为 Webpack 编译的每个模块添加一个 JavaScript 字符串?
- windows - 使用数组时 PowerShell 中的错误
- ssl - 使用 go-daddy 的 ssl 证书启用 HTTPS