R-sqldf-нужны явные единицы для числового преобразования

Мне нужно присоединиться к 2 таблицам, используя поле даты

> class(pagos$pseudo_1mes)
[1] "Date"
>  class(pseudo_meses$pseudo_1mes)
[1] "Date"

Мой код:

library(sqldf)

pagos<-sqldf("select a.*, b.mes_atras from pagos a 
        left join pseudo_meses b
      on a.pseudo_1mes=b.pseudo_1mes")

И я получаю следующую ошибку и никакого результата:

Ошибка в asfn(rs[[i]]): нужны явные единицы для числового преобразования

Как я могу это решить? Спасибо


person GabyLP    schedule 24.09.2014    source источник
comment
Пожалуйста, предоставьте воспроизводимый код и данные в ваших вопросах.   -  person G. Grothendieck    schedule 25.09.2014
comment
Также обратите внимание, что это дает правильный результат для меня и не дает ошибки: library(sqldf); DF1 <- DF2 <- data.frame(d = Sys.Date()); sqldf("select * from DF1 left join DF2 on DF1.d = DF2.d")   -  person G. Grothendieck    schedule 25.09.2014


Ответы (4)


У одной из моих переменных был class = 'difftime' вместо обычного числового, потому что я вычел даты. SQLDF не работает с классом difftime. Что произошло со мной, так это то, что у меня была таблица данных, я вычел некоторые даты и получил тип переменной difftime. Я преобразовал его в data.frame, и когда я снова сделал вычитание, он был числовым.

person winampman    schedule 02.04.2015
comment
Я также использовал difftime для затронутого набора данных, в этом должно быть что-то - person Hack-R; 02.06.2015
comment
Та же проблема для меня. У меня был один столбец difftime в моем кадре данных. Ошибка исчезла после приведения его к числовому. - person AffableAmbler; 27.09.2017

У меня та же проблема. Мое решение состоит в том, чтобы добавить (method = "name__class") в конец команды, например:

sqldf("select * from pagos", method = "name__class")

Однако похоже, что формат переменной даты будет изменен, хотя переменная даты может быть обновлена ​​​​позже. Я думаю, что это все еще полезное решение, так как моя цель - заставить sqldf работать для решения сложной задачи, в то время как обновление столбца относительно намного проще.

person Young    schedule 27.09.2016
comment
Отличное решение. Решил мою проблему (аналогичная проблема с пакетом smbinning). Благодарю вас! - person Borislav Aymaliev; 04.12.2017
comment
@Young: работает нормально, спасибо за ответ. Как мы можем преобразовать дату обратно в исходный формат? - person Toros91; 14.12.2017

Я получил такое же сообщение об ошибке. Я не знаю причину сообщения, но использование явных единиц измерения в sql-запросе решило проблему для меня.

Использовать:

sqldf("select x, y, z from pagos")

Не используйте:

sqldf("select * from pagos")
person peter    schedule 07.11.2014
comment
Я получил Error in asfn(rs[[i]]) : need explicit units for numeric conversion In addition: Warning message: In FUN(X[[i]], ...) : NAs introduced by coercion даже с явными именами столбцов - person Hack-R; 02.06.2015

Я получил ту же ошибку, затем я обнаружил, что переменная в моем наборе данных не была числовой. Поэтому я преобразовал эту переменную в числовую (as.numeric()). Тогда это сработало.

person Yukun    schedule 24.02.2015
comment
Это, казалось, решило проблему для меня. Это было единственное изменение, которое я сделал, и ошибка исчезла. - person Jazzmine; 27.03.2016