ren*_*nsa 5 datetime r date lubridate tidyverse
我有一个带有日期时间字符串列的数据框:
library(tidyverse)
library(lubridate)
testdf = data_frame(
mytz = c('Australia/Sydney', 'Australia/Adelaide', 'Australia/Perth'),
mydt = c('2018-01-17T09:15:00', '2018-01-17T09:16:00', '2018-01-17T09:18:00'))
testdf
# A tibble: 3 x 2
# mytz mydt
# <chr> <chr>
# 1 Australia/Sydney 2018-01-17T09:15:00
# 2 Australia/Adelaide 2018-01-17T09:16:00
# 3 Australia/Perth 2018-01-17T09:18:00
Run Code Online (Sandbox Code Playgroud)
我想将这些日期时间字符串转换为具有各自时区的POSIX日期时间对象:
testdf %>% mutate(mydt_new = ymd_hms(mydt, tz = mytz))
Run Code Online (Sandbox Code Playgroud)
mutate_impl(.data,点)中的错误:评估错误:
tz参数必须是单个字符串。另外:警告消息:如果if(tz!=“ UTC”){:条件的长度> 1,并且仅使用第一个元素
如果使用ymd_hms不带时区的内容并将其传送到,我将得到相同的结果force_tz。得出结论,就时区操作而言,lubridate不支持任何形式的矢量化是否公平?
另一种选择是map2。将不同的tz输出存储在 a 中可能会更好,list因为这可能会被强制转换为单个tz
library(tidyverse)
out <- testdf %>%
mutate(mydt_new = map2(mydt, mytz, ~ymd_hms(.x, tz = .y)))
Run Code Online (Sandbox Code Playgroud)
如果需要,可以unnest编辑
out %>%
unnest
Run Code Online (Sandbox Code Playgroud)
中的值list是
out %>%
pull(mydt_new)
#[[1]]
#[1] "2018-01-17 09:15:00 AEDT"
#[[2]]
#[1] "2018-01-17 09:16:00 ACDT"
#[[3]]
#[1] "2018-01-17 09:18:00 AWST"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |