【问题标题】:How can I separate this date time column into different columns?如何将此日期时间列分成不同的列?
【发布时间】:2021-05-20 05:33:05
【问题描述】:

我目前正在尝试将我的日期和时间数据分成单独的列。

我的数据格式为 dd/mm/yyyy hh:mm:ss a.m(或 p.m)。我需要做的是将日期和时间分成 2 个单独的列。然后将我的日期子集为日、月和年。我还想将时间转换为 24 小时制。我尝试过使用 strsplit、as.Date 和许多其他方法,但我仍然无法让我的数据达到我实际上可以用它做任何事情的程度。刚刚出现了无数错误。

为了便于理解,我的日期和时间列数据位于一个更大的数据集中。此列所需信息的标题是“Date_Time”。在此列中,示例日期为“17/09/2019 9:15:27 a.m.”。可以想象,尝试使用它是非常令人沮丧的。

我理想中想要的是……

日月年时间
2019年17月9日09:15:27

...同时仍保留原始的 Date_Time 列

【问题讨论】:

  • 你可以使用strsplit或者如果你想使用lubridate然后定义format
  • 我尝试过使用 strsplit 和 lubridate 并定义格式,但我对 R 相当陌生,所以我可能一直在错误地使用它
  • 如果s <- "17/09/2019 9:15:27 a.m.",那么day <- substr(s,1,2) , month <- substr(s,4,5) 这是粗略但有效的方法。
  • 好的,试一试,看看它现在是如何工作的。不过,我需要将其应用于整个数据集
  • 如果您想坚持使用strsplit,那么这可能会对strsplit(s, "/|\\s+") 有所帮助。但是您必须将拆分的第一、第二和第三部分标记为要创建的列。

标签: r string lubridate


【解决方案1】:

您可以将其转换为POSIXct,然后使用format 提取日、月、年和时间。

x <- c("17/09/2019 9:15:27 a.m.", "17/09/2019 9:15:27 p.m.")
x <- gsub("\\.", "", x) #Remove the . in a.m.
x <- as.POSIXct(x, format="%d/%m/%Y %I:%M:%S %p") #convert to POSIX
data.frame(day   = format(x, "%d"), 
           month = format(x, "%m"),
           year  = format(x, "%Y"),
           time  = format(x, "%T"))
#  day month year     time
#1  17    09 2019 09:15:27
#2  17    09 2019 21:15:27

如果只拆分成列就足够了,我会使用strsplit 并拆分/

x <- c("17/09/2019 9:15:27 a.m.", "17/09/2019 9:15:27 p.m.")
do.call(rbind, strsplit(x, "[/ ]"))
#     [,1] [,2] [,3]   [,4]      [,5]  
#[1,] "17" "09" "2019" "9:15:27" "a.m."
#[2,] "17" "09" "2019" "9:15:27" "p.m."

【讨论】:

  • 这是我最后用的。谢谢大家!给了我我需要的东西,没有错误等!
猜你喜欢
  • 2019-09-23
  • 2022-01-22
  • 2020-12-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2021-10-10
相关资源
最近更新 更多