gpt4 book ai didi

r - 处理 R 中连接的多个表的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 09:34:38 24 4
gpt4 key购买 nike

library(data.table)

如果您在星型模式中说 3 个表。像这样的东西。我有一个虚拟表 DT1 这取决于 dt2 和 dt3
dt1 <- data.table( x1 = 1:10, y1 = 11:20)
dt2 <- data.table( x2 = 1:10, y2 = letters[11:20])
dt3 <- data.table( x3 = letters[1:10], y3 = 11:20)

dt1[dt2, on = c( x1 = "x2")]
dt2[dt1, on = c( x2 = "x1")]
dt3[dt1, on = c( y3 = "y1")]


在上面的场景中,您必须记住每个查询的近 4 种组合。连同他们的订单。想象一下这样的场景,您直接从数据库或 csvs 中拥有 10 个或 20 个这样的表。
dt1[dt2]
dt2[dt1]
dt1[dt3]
dt3[dt1]

一种方法是编写这样的函数。
rememberJoin <- function(table1, table2){
if(
table1 == "dt1" &&
table2 == "dt2"
){
return(c( x1 = "x2"))
} else if(
table1 == "dt2" &&
table2 == "dt1"
){
return(c( x2 = "x1"))
} else if(
table1 == "dt3" &&
table2 == "dt1"
){
return(c( y3 = "y1"))
} else if(
table1 == "dt1" &&
table2 == "dt3"
){
return(c( y1 = "y3"))
}
}


dt1[dt2, on = rememberJoin("dt1", "dt2")]
dt2[dt1, on = rememberJoin("dt2", "dt1")]
dt3[dt1, on = rememberJoin("dt3", "dt1")]


但是整个解决方案很笨拙,并且有太多的 if 语句并且很难阅读或调试。我通过创建命名列表使用了另一种解决方案。
Join <- list(
dt1dt2 = c( x1 = "x2"),
dt2dt1 = c( x2 = "x1"),
dt3dt1 = c( y3 = "y1"),
dt1dt3 = c( y1 = "y3")
)

dt1[dt2, on = Join$dt1dt2]
dt2[dt1, on = Join$dt2dt1]
dt3[dt1, on = Join$dt3dt1]


它工作得很好。但我仍然不确定这是否是最佳解决方案,或者是否有任何具有连接感知表的软件包。任何建议或替代方案都可以。我有非常复杂的数据集,我正在处理超过 25 个表。我正在寻找解决方案。

最佳答案

我刚刚发现了一个与同一问题相关的软件包。在此提及,仅供引用。

https://krlmlr.github.io/dm/articles/dm-visualization.html

它记录了本地 r 数据帧的所有连接。必须看看它。

关于r - 处理 R 中连接的多个表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59508392/

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