Как использовать внешние пакеты внутри 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
 )
Другие вопросы по тегам