【问题标题】:SQL Server Management Studio Data Tables to RSQL Server Management Studio 数据表到 R
【发布时间】: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.xDataDate.y 分别来自Table2 和Table3。
  • 我强烈建议您专注于您的 sql 语句,而不是连接数据库本身中的表(这是它们的设计目的)。可能(希望)您的数据库在您的表上有索引,这将加快您的连接;而首先将它们导入 R 将丢失任何关系和索引信息。此外,内连接可能会导致不推荐使用的数据集,其中键不存在或条件不匹配,因此您最终将较少的数据导入 R,如果有大量数据要下载,这可能会提高效率。
  • 您的 merge() 调用看起来是正确的,它应该像您期望的那样引入所有列。您可以执行“dput(head(Table2))”和“dput(head(Table3))”并将该输出复制粘贴到您的问题中以显示您正在使用的特定数据吗?将帮助其他人了解正在发生的事情并测试解决方案。
  • Soren,在您的建议的帮助下,我决定加入数据库中的表,您说得对,这使它变得更容易和更高效。谢谢。

标签: r sql-server database dataframe merge


【解决方案1】:

试试这个,它只选择您感兴趣的特定 data.frame 列传递给合并函数,并且应该产生一个合并的 data.frame 结果,其中仅包含因子、曝光和风险(没有 DataDate)作为问题问:

df<-merge(x=Table2[,c("Factor","Exposure")],y=Table3[,c("Factor","Risk")],by="Factor",all.x=TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    相关资源
    最近更新 更多