【发布时间】:2018-06-25 19:01:01
【问题描述】:
我有一个包含一列日期时间字符串的数据框:
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
我想将这些日期时间字符串转换为具有各自时区的 POSIX 日期时间对象:
testdf %>% mutate(mydt_new = ymd_hms(mydt, tz = mytz))
mutate_impl(.data, dots) 中的错误: 评估错误:
tz参数必须是单个字符串。 另外:警告信息: 在 if (tz != "UTC") { : 条件的长度 > 1,并且只使用第一个元素
如果我使用不带时区的ymd_hms 并将其通过管道传输到force_tz,我会得到相同的结果。是否可以得出结论,当涉及到时区操作时,lubridate 不支持任何类型的矢量化?
【问题讨论】:
-
也许是
testdf %>% rowwise %>% mutate(mydt_new = ymd_hms(mydt, tz = mytz))? -
行得通!我不明白为什么需要
rowwise,但... -
我想如果它在组上运行,并且每个组有一行,那么 tz 在每次调用中的长度仅为 1。即使我有多行具有相同的时区,那也可以。谢谢!
-
如果您愿意,很高兴将此作为已接受的答案!
-
好的。让我来处理。
标签: r date datetime tidyverse lubridate