r - 使用 mutate_if 和 force_tz 更改所有时间戳的时区

标签 r postgresql dplyr lubridate

我正在使用 RPostgreSQL 从 Postgres 数据库中提取数据,它在导入 R 时将时间戳转换为系统时区。因此,导入后我想设置所有的时区UTC 时间戳。我想我可以使用 dplyrlubridate 优雅地做到这一点,就像这样:

df %>%
   mutate_if(lubridate::is.POSIXct, lubridate::force_tz(., tzone='UTC')) -> df

但这会抛出

Error in UseMethod("as.fun_list") : 
  no applicable method for 'as.fun_list' applied to an object of class "data.frame"

所以我显然错误地使用了mutate_if()

最佳答案

这个有效:

df %>%
  dplyr::mutate_if(lubridate::is.POSIXct,
                   function(x) lubridate::force_tz(x, tzone='UTC')) -> df

这个类似的 purrr 解决方案也是如此:

df %>%
  purrr::map_if(lubridate::is.POSIXct,
                ~ lubridate::force_tz(., tzone='UTC')) %>%
  as_data_frame -> df

这是否尽可能优雅?

关于r - 使用 mutate_if 和 force_tz 更改所有时间戳的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39469847/

相关文章:

R 图形 : output to several file formats

r - 在 R 中的两个数据框中使用多行过滤

r - Purrr(或扫帚)用于计算分组数据集的比例测试(多比例测试)

R - 比较 R 中 2 个数据帧之间的数据

r - 如何知道最好的 FASSTER 配方

r - 使用 tidyverse 进行条件过滤

regex - R:如何使用正则表达式对列表元素进行分组和聚合?

ruby-on-rails - 致命 : database "postgres" does not exist

sql - 在 postgresql 的子查询中使用外部查询结果

json - 汇总 JSON 值