如何在R中的sqldf中避免FULL OUTER JOIN

问题描述

我有两个数据框(让我们分配 df1df2),它们每个都有 1347 列(并且两个数据框的列名完全相同)和不同的行数({{1} 中的 730 }} 和 df1 中的 706)。

我需要计算所有列之间的差异(除了一列,即 1346 列之间的差异)并保存列的名称。我知道的最好方法是在 df2 包中使用 full outer join 连接编写 sql 语句,因为我需要完整范围的对象。 这是一个小例子:

sqldf

但是 sqldf("select a.regn,a.col1 - b.col1 as col1,a.col2 - b.col2 as col2 ... from df1 a full outer join df2 b on a.regn = b.regn") 不提供 sqldf

当列数相当高时,我就在循环中编写了我的 sql 语句。

我怎样才能避免这个问题?

解决方法

您可以组合两个在 left outer joins 后端工作的 SQLite

sqldf("select a.regn,a.col1 - b.col1 as col1,a.col2 - b.col2 as col2 ... 
       from df1 a left outer join df2 b on a.regn = b.regn UNION
       select a.regn,a.col2 - b.col2 as col2 ... 
       from df2 a left outer join df1 b on a.regn = b.regn 
")

如果您在 df1df2 中没有重复的行,此方法有效,因为 UNION 会删除重复的行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...