【发布时间】:2020-12-07 22:33:00
【问题描述】:
我正在处理一个有很多时间戳的数据集。我尝试识别一些无效的时间戳并将其设置为 NA。因为if_else() 强制我在双臂中使用相同的数据类型,所以我使用as.POSIXct(NA) 对这些缺失值进行编码。
有趣的是,当我在if_else() 中反转测试(并更改true 和false 参数)时,结果会有所不同。
这里有一些代码来说明我的问题:
x <- tibble(
A = parse_datetime("2020-08-18 19:00"),
B = if_else(TRUE, A, as.POSIXct(NA)),
C = if_else(FALSE, as.POSIXct(NA), A)
)
> x
# A tibble: 1 x 3
A B C
<dttm> <dttm> <dttm>
1 2020-08-18 19:00:00 2020-08-18 19:00:00 2020-08-18 21:00:00
任何想法,为什么 C 会晚两个小时?
跟进:
根据下面的优秀答案,我认为更易读的解决方案可能应该使用parse_datetime(NA_character_) 生成缺少的日期时间对象,并在代码中使用它而不是as.POSIXct()。
R> NA_datetime_ <- parse_datetime(NA_character_)
R> x <- tibble(
A = parse_datetime("2020-08-18 19:00"),
B = if_else(TRUE, A, NA_datetime_),
C = if_else(FALSE, NA_datetime_, A)
)
R> map(x, lubridate::tz)
$A
[1] "UTC"
$B
[1] "UTC"
$C
[1] "UTC"
【问题讨论】: