如何从字符型日期时间列与时区列创建datetime对象?
解决方法
问题出在as.POSIXct()的tz参数不支持向量输入,即便用rowwise()也无法实现逐行传递不同时区值。以下是两种可行的解决方式:
方法1:Base R 逐行处理
使用mapply()实现逐行匹配时间字符串和对应时区:
data_frame$start_in_zone <- mapply(function(dt_str, tz) { as.POSIXct(dt_str, tz = tz) }, data_frame$start, data_frame$start_timezone)
方法2:Tidyverse + Lubridate 更简洁实现
借助purrr::map2()逐行处理,结合lubridate的时间处理函数更直观:
library(tidyverse) library(lubridate) data_frame <- data_frame %>% mutate(start_in_zone = map2(start, start_timezone, ~force_tz(ymd_hms(.x), tzone = .y)))
验证结果
可以查看转换后每个值的时区是否正确:
# 查看第4条记录的时区 attr(data_frame$start_in_zone[4], "tzone") # 输出:"Indian/Maldives"
内容的提问来源于stack exchange,提问作者bountan
相关产品推荐
相关产品推荐

