【问题标题】:sqldf blank join generates unexpected resultssqldf 空白连接生成意外结果
【发布时间】:2014-01-25 04:01:05
【问题描述】:

我有 df1 和 df2 以及 sql 连接:

df1 <- data.frame(fn1 = c('','NA','' ,'BF'),
              ln1 = c('DRFA', 'DEFF','DDFF', 'ANCD'))
 df2 <- data.frame(fn2 = c('','AA','BB', 'BF'),
              ln2 = c('DRFA', 'DEFF','FFFF', 'ANCD'))

library(sqldf)

nm = sqldf("
select a.*, b.*,
  (a.fn1 !=' '  and a.fn1 == b.fn2  ) as fnm,
  (a.ln1 == b.ln2) as lnm
  from df1 a, df2 b
  where (fnm + lnm)>= 1

       ")
 > nm
   fn1  ln1 fn2  ln2  fnm lnm
1       DRFA     DRFA   1   1
2  NA   DEFF  AA DEFF   0   1
3       DDFF     DRFA   1   0
4  BF   ANCD  BF ANCD   1   1

结果应该是1和3中的fnm应该是0。如何纠正呢?
谢谢

【问题讨论】:

  • 您检查了a.fn1 != ' ',结果为 T 为 1 和 3,因为值是 '' 而不是 ' '。试试a.fn1 != ""
  • 会产生错误:Error: unexpected string constant in: " ""
  • 因为你有sqldf("你必须在里面使用'
  • 你必须使用a.fn1!='',而不是a.fn1~=""。这对我行得通。现在缺少第 3 行,因为 fnm 和 lnm 都是 0。
  • @JamesTobin 您应该将此作为答案发布。

标签: r sqldf


【解决方案1】:

您检查了a.fn1 != ' ',结果为T 1 和3,因为值是'' 而不是' '。试试a.fn1 != ''

【讨论】:

  • 谢谢。有用。我从他们工作的 SAS 转移了代码
  • 所以 R 区分了 '' 和 ' '。我们怎么知道空白是由''和''生成的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
相关资源
最近更新 更多