【发布时间】: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 您应该将此作为答案发布。