Преобразование временных меток в временные метки с помощью mutate_if

У меня есть база данных с временными метками (без часового пояса), которую я хотел бы привести к временной метке (с часовым поясом) до использования collect(). До сих пор я пробовал это:

db_tbl %>% mutate_if(lubridate::is.timepoint, funs(CAST))

Но я не могу понять, как добавить AS timestamptz к этому вызову функции

Это дает мне:

Error in result_create(conn@ptr, statement) : 
  Failed to prepare query: ERROR:  syntax error at or near ")"
LINE 1: SELECT "user_id", "time_zone", CAST("confirmed_at") AS "conf...

а также

db_tbl %>% mutate_if(lubridate::is.timepoint, funs(sql(paste0(., "::timestamptz"))))

Но я не могу понять, как заставить paste0() выполняться вместо перевода в CONCAT: это дает мне:

Applying predicate on the first 100 rows
<SQL>
SELECT "user_id", "time_zone", CONCAT_WS('', "confirmed_at", '::timestamptz') AS "confirmed_at"
FROM (SELECT "user_id", "time_zone", "confirmed_at"
FROM app.app_users) "paiaayosfl"

В конечном счете, я пытаюсь получить временные метки без R, предполагающего мой местный часовой пояс.


person Nick DiQuattro    schedule 02.11.2018    source источник


Ответы (1)


Для наших будущих потомков:

  .data %>%
    mutate_if(lubridate::is.timepoint, funs(CAST(. %as% timestamptz))) 
person Nick DiQuattro    schedule 05.11.2018