【发布时间】:2019-03-04 16:47:05
【问题描述】:
通过 R 连接到 SQL Server Management Studio 后,我提取了 5 个我需要的数据表。我将其中一个表提取到 R 中的代码示例如下:
sql = "SELECT * FROM dbo.tblBenchmarkindex" BenchmarkIndex1 <- sqlQuery(db, sql)`
我为其他四个表执行此精确代码。我需要将多个表合并在一起以获得一个大的“聚合表”,并且由于每个表都由一个或多个列链接,我认为合并是我最好的选择。我现在遇到的问题是这样的:
表 2 有 4 个变量和大约 808,000 多个观察值:Factor、Exposure、DataDate、BsID
表 3 有 3 个变量和大约 8000 个观察值:因子、风险、数据日期
例如,我尝试过的是:
df<-merge(x=Table2,y=Table3,by="Factor",all.x=TRUE)
我得到的输出不包括 table3 的 Datadate,我认为这是因为我做了一个左外连接,但我需要在没有添加重复观察的情况下包含它。当我进行自然连接或右外连接时,我会观察到大量的“添加”观察结果。
我的简洁问题是:如何通过它们共有的变量(因子)合并这两个数据表,同时不创建任何添加的变量?我对 R 很陌生,但觉得我了解不同类型的连接函数,但觉得我没有正确实现它们。
【问题讨论】:
-
您查看结果的仔细程度如何?因为我的期望是(基于
merge的文档)结果将有列DataDate.x和DataDate.y分别来自Table2 和Table3。 -
我强烈建议您专注于您的 sql 语句,而不是连接数据库本身中的表(这是它们的设计目的)。可能(希望)您的数据库在您的表上有索引,这将加快您的连接;而首先将它们导入 R 将丢失任何关系和索引信息。此外,内连接可能会导致不推荐使用的数据集,其中键不存在或条件不匹配,因此您最终将较少的数据导入 R,如果有大量数据要下载,这可能会提高效率。
-
您的 merge() 调用看起来是正确的,它应该像您期望的那样引入所有列。您可以执行“dput(head(Table2))”和“dput(head(Table3))”并将该输出复制粘贴到您的问题中以显示您正在使用的特定数据吗?将帮助其他人了解正在发生的事情并测试解决方案。
-
Soren,在您的建议的帮助下,我决定加入数据库中的表,您说得对,这使它变得更容易和更高效。谢谢。
标签: r sql-server database dataframe merge