r - 为什么 dplyr 会转换 POSIXct 对象
问题描述
我有一个 POSIXct 类的日期时间对象。我需要通过增加几个小时来调整值。我知道我可以使用基本加法来做到这一点。例如,我可以向 POSIXct 对象添加 5 小时,如下所示:
x <- as.POSIXct("2009-08-02 18:00:00", format="%Y-%m-%d %H:%M:%S")
x
[1] "2009-08-02 18:00:00 PDT"
x + (5*60*60)
[1] "2009-08-02 23:00:00 PDT"
现在我有一个数据框,其中有些时候还可以,有些时候很糟糕。
> df
set_time duration up_time
1 2009-05-31 14:10:00 3 2009-05-31 11:10:00
2 2009-08-02 18:00:00 4 2009-08-02 23:00:00
3 2009-08-03 01:20:00 5 2009-08-03 06:20:00
4 2009-08-03 06:30:00 2 2009-08-03 11:30:00
请注意,第一个数据帧条目的“up_time”小于“set_time”。因此,在这种情况下,“好”时间是 set_time < up_time 的时间。而“坏”时间是 set_time > up_time。我想留下好的条目并修复坏的条目。应通过创建等于“set_time”+ 持续时间的“up_time”来修复错误条目。我使用以下 dplyr 管道执行此操作:
df1 <- tbl_df(df) %>% mutate(up_time = ifelse(set_time > up_time, set_time +
(duration*60*60), up_time))
df1
# A tibble: 4 x 3
set_time duration up_time
<dttm> <dbl> <dbl>
1 2009-05-31 14:10:00 3. 1243815000.
2 2009-08-02 18:00:00 4. 1249279200.
3 2009-08-03 01:20:00 5. 1249305600.
4 2009-08-03 06:30:00 2. 1249324200.
正常运行时间已强制为数字:
> str(df1)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of 3 variables:
$ set_time: POSIXct, format: "2009-05-31 14:10:00" "2009-08-02 18:00:00"
"2009-08-03 01:20:00" "2009-08-03 06:30:00"
$ duration: num 3 4 5 2
$ up_time : num 1.24e+09 1.25e+09 1.25e+09 1.25e+09
我可以使用以下方法将其转换回所需的 POSIXct 格式:
> as.POSIXct(df1$up_time,origin="1970-01-01")
[1] "2009-05-31 17:10:00 PDT" "2009-08-02 23:00:00 PDT" "2009-08-03 06:20:00
PDT" "2009-08-03 11:30:00 PDT"
但我觉得这最后一步不应该是必要的。我可以/如何避免让 dplyr 更改我的变量格式?
解决方案
推荐阅读
- r - 如何在 Rhel8 中安装 knitr
- sas - 如何在 SAS 中编写 foreach 循环语句?
- r - 创建一个输出一系列 2×2 表的函数
- google-sheets - How to use several conditions with QUERY + IMPORTRANGE in google sheets?
- .htaccess - url issue any link is directing back to home page or 404 not found. The error is /storage/emulated/0/htdocs/naira.com/incfiles/urls.php on line 18
- r - WCAG 2.1 与 shinydashboard 应用程序表单标签的兼容性
- amazon-web-services - Amazon MQ & ETL- how to read the data?
- php - PHP Protect property cannot be public but needed in Test
- sass - How to integrate @for loops with different variables?
- python - Discord bot 不响应命令