Пустое соединение sqldf приводит к неожиданным результатам

У меня есть соединение 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

В результате должно получиться, что fnm в 1 и 3 должно быть 0. Как это исправить?
Спасибо


person user1582755    schedule 24.01.2014    source источник
comment
вы проверили a.fn1 != ' ', что приводит к T для 1 и 3, потому что значение равно '', а не ' '. попробовать a.fn1 != "" ?   -  person James Tobin    schedule 24.01.2014
comment
он будет генерировать ошибку: Ошибка: непредвиденная строковая константа в:   -  person user1582755    schedule 24.01.2014
comment
поскольку у вас есть sqldf(", вы должны использовать ' внутри   -  person James Tobin    schedule 24.01.2014
comment
Вы должны использовать a.fn1!='', а не a.fn1~="". Это подходит для меня. Строка 3 теперь отсутствует, потому что fnm и lnm равны 0.   -  person jlhoward    schedule 24.01.2014
comment
@JamesTobin, вы должны опубликовать это как ответ.   -  person jlhoward    schedule 24.01.2014
comment
не был уверен, была ли эта мелочь тем, о чем спрашивал ОП, думаю, это было   -  person James Tobin    schedule 25.01.2014


Ответы (1)


вы проверили a.fn1 != ' ', что приводит к T для 1 и 3, потому что значение равно '', а не ' '. попробуй a.fn1 != ''

person James Tobin    schedule 24.01.2014
comment
Спасибо. оно работает. Я передал коды из SAS, в которых они работали - person user1582755; 25.01.2014
comment
Итак, R различает '' и ''. Как мы можем узнать, что пробел сгенерирован '' и ' '. Спасибо. - person user1582755; 25.01.2014