Как использовать внешние пакеты внутри R dbplyr mutate
В настоящее время я извлекаю набор данных с помощью dbplyr, используя следующее:
connectInfo <- dbConnect(
odbc(),
Driver = "SQL Server",
Server = "myServerName",
Database = "myDatabaseName",
Trusted_Connection = "True"
)
tbl(connectInfo, "tableName") %>%
summarise(
nbDate = LEFT(nbDate, 5),
book,
rateFeeChg
) %>%
mutate(
rateFeeChg = rateFeeChg * 100
)
Со следующим выводом:
nbDate book rateFeeChg
<chr> <chr> <dbl>
1 38348 Classic 0.0000000
2 38744 Classic 2.1270990
3 39640 Classic 2.8999999
4 40423 Classic 0.0000000
# ... with more rows
То, что я хочу сделать, это преобразовать эти 5-значные значения даты в обычные значения даты внутри функции мутирования. Я знаю, с помощью библиотеки janitor, я могу легко конвертировать ее, но когда я пытаюсь положить
mutate(
rateFeeChg = rateFeeChg * 100,
nbDate = janitor::excel_numeric_to_date(nbDate)
)
Я получаю следующую ошибку:
Error in janitor::excel_numeric_to_date(nbDate) :
object 'nbDate' not found
1 ответ
Главное, чтобы в MS SQL это преобразование сначала нужно было datetime
и затем в date
, Так как в dbplyr
в настоящее время нет функции, которая приводит к datetime
Лучше всего использовать sql()
передать команду MS SQL. Таким образом, вы можете сохранить всю свою часть процесса сервера и избежать collect()
ввод данных в память R. По умолчанию datetime
преобразование в SQL, похоже, имеет ту же базовую дату, что и Excel, поэтому вы должны получить те же даты назад. Вот предлагаемое решение, которое я только что протестировал на своей системе:
tbl(connectInfo, "tableName") %>%
summarise(
nbDate = sql("CAST(LEFT(nbDate, 5) as datetime)"),
book,
rateFeeChg
) %>%
mutate(
nbDate = as.Date(nbDate),
rateFeeChg = rateFeeChg * 100
)