如何解决如何在R中的sqldf中避免FULL OUTER JOIN
我有两个数据框(让我们分配 df1
和 df2
),它们每个都有 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
")
如果您在 df1
或 df2
中没有重复的行,此方法有效,因为 UNION
会删除重复的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。