【问题标题】:Combining separate date time fields to one date_time field将单独的日期时间字段合并到一个 date_time 字段
【发布时间】:2018-07-04 03:19:18
【问题描述】:

我使用以下 R 代码使用 lubridate 和 dplyr 以字符格式从单独的日期和时间字段创建 POSIXct 日期时间字段。

library(dplyr)
library(lubridate)
c_cycle_work <- tibble(
  StartDate = c("1/28/2011", "2/26/2011", "4/2/2011", "4/11/2011"),
  StartTime = c("10:58", "6:02", "6:00", "9:47")
)

c_cycle_work %>%
  mutate(start_dt = paste0(StartDate, StartTime, sep = " ", collapse = NULL)) %>%
  mutate(start_dt = mdy_hms(start_dt))

# 1 1/28/2011     10:58   2020-01-28 11:10:58
# 2 2/26/2011      6:02   2020-02-26 11:06:02
# 3  4/2/2011      6:00   2020-04-02 11:06:00
# 4 4/11/2011      9:47   2020-04-11 11:09:47

我创建的 start_dt 字段是 Y m d 格式,即使我根据数据使用了 mdy_hms。此外,所有年份都已更改为 2020 年。

重复了几次,使用 paste 与 paste0 等,但仍然难倒。

【问题讨论】:

  • 日期和日期时间的日期部分始终以 R 中的 ISO 格式打印。阅读器功能用于输入格式,而不是输出。
  • 将整数转换为字符串和问题之间有什么关系吗?你不应该编辑标题吗?
  • 我之前正在搜索与此相关的内容。如何更改标题?
  • 标题已编辑。我将您的评论复制并粘贴到@MrFlick 的答案中。

标签: r date lubridate


【解决方案1】:

您的问题是 paste0() 没有 sep= 参数。因此,当您粘贴日期和时间时,您会得到1/28/201110:58,它会将其拆分为1/28/20/11/10/58,尽管它似乎与我的版本lubridate_1.6.0 的工作方式不同。你也使用“hms”但你的时间没有秒。这应该适用于您的数据

c_cycle_work %>%
  mutate(start_dt = paste(StartDate,  StartTime, sep=" ")) %>% 
  mutate(start_dt = mdy_hm(start_dt))

#   StartDate StartTime            start_dt
#       <chr>     <chr>              <dttm>
# 1 1/28/2011     10:58 2011-01-28 10:58:00
# 2 2/26/2011      6:02 2011-02-26 06:02:00
# 3  4/2/2011      6:00 2011-04-02 06:00:00
# 4 4/11/2011      9:47 2011-04-11 09:47:00

【讨论】:

  • 问题标题来自我之前使用的搜索。我想把它改成。将单独的日期时间字段合并为一个 date_time 字段。
猜你喜欢
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多