Перекодируйте значения столбцов sqlite с помощью dplyr

#r #dplyr #rsqlite

Вопрос:

У меня есть чрезмерно большие данные, сохраненные в базе данных SQLite. Мне нужно перекодировать значения некоторых столбцов, но, к сожалению, мой код генерирует ошибку, которую я действительно не могу отладить. Вот код, который я использую.

 library(RSQLite) 
library(inborutils)
library(dplyr)
library(dbplyr)
db <- dbConnect(SQLite(), dbname = "ukbb.sqlite")
dbListTables(db)
bd <- tbl(db, "Uk_Bb")
bd %>%
  mutate(f.19.0.0 = recode(bd, f.19.0.0, '1' = "Direct entry",
                        '2' = "Manual entry",
                        '3' = "Not performed",
                        '6' = "Not performed - equipment failure",
                        '7' = "Not performed - other reason", 
                        .default = NULL))
 

f.19.0.0 является столбцом в таблице и имеет следующие значения: —

 bd %>% select(f.19.0.0)
# Source:   lazy query [?? x 1]
# Database: sqlite 3.36.0 [C:Users*****DownloadsUkBBukbb.sqlite]
f.19.0.0
       <dbl>
1        1
2        1
3        1
4       NA
5        1
6       NA
7       NA
8        1
9        1
10        1
# ... with more rows
 

Ошибка, которую я получаю, заключается в том, что

Ошибка в методе использования(«escape») : неприменимый метод «escape «не применяется к объекту класса «c («tbl_SQLiteConnection», «tbl_dbi», «tbl_sql», «tbl_lazy», «tbl») » Кроме того: Предупреждение: Именованные аргументы игнорируются при перекодировании SQL

Любая помощь/объяснение для решения этой проблемы очень ценится!

Ответ №1:

Из того, что я понимаю о вашей ошибке , ваш код неправильно переводится обратно в SQL ::dbplyr() , я не уверен, что это сработает, но я попытался предоставить функции mutate более похожую на SQL альтернативу recode() , case_when() . Попробуй это и посмотри, как пойдешь:

 library(tidyverse)
bd %>% 
   mutate(
      f.19.0.0 = 
         case_when(
            f.19.0.0 == 1 ~ "Direct entry",
            f.19.0.0 == 2 ~ "Manual entry",
            f.19.0.0 == 3 ~ "Not performed",
            f.19.0.0 == 6 ~ "Not performed - equipment failure",
            f.19.0.0 == 7 ~  "Not performed - other reason",
            TRUE ~ NA_character_
         )
   )
 

Комментарии:

1. Спасибо за помощь!