首页 > 解决方案 > 如何在R中用空格分隔包含日期和时间的列

问题描述

我有两列,一列是开始日期和时间,一列是结束日期和时间。我想将它们分成四列:Start_date、Start_time、End_date、End_time。它们由空格分隔(每列的格式为“12/04/2017 05:25 PM”)。最终我需要找到开始日期和时间与结束日期和时间之间的差异。我是 R 的初学者,所以我真的很适合你的帮助。

标签: r

解决方案


出于这个问题的目的,我假设您在美国,因此您提供的示例日期是指 2017 年 12 月 4 日。

第一步是将两个日期列转换为日期而不是字符串。datetime 对象中元素的模式必须在格式化命令中回显。根据您提供的示例,我创建了一个玩具数据框。

df <- data.frame(Start = c("12/04/2017 05:25 PM","05/05/2017 06:25 PM"), End = c("12/09/2018 05:15 PM","05/05/2019 06:24 PM"))
df
            Start                 End
1 12/04/2017 05:25 PM 12/09/2018 05:15 PM
2 05/05/2017 06:25 PM 05/05/2019 06:24 PM

现在将这些字符串转换为日期对象:

library(lubridate)

df$Start <- strptime(df$Start,format="%m/%d/%Y %I:%M %p")
df$End <- strptime(df$End,format="%m/%d/%Y %I:%M %p")
df
            Start                 End
1 2017-12-04 17:25:00 2018-12-09 17:15:00
2 2017-05-05 18:25:00 2019-05-05 18:24:00

您会注意到您指定的空格包含在格式模式中,以及指示日期的哪些部分出现在何处以及单个数字是否用零填充的符号(就像您的所有数字一样)。有关在哪种情况下使用哪些符号/模式的参考,我推荐此页面: https ://www.stat.berkeley.edu/~s133/dates.html

如果您想确定两个日期时间之间的差异,现在只需从另一个中减去一个即可。

df$diff <- df$End - df$Start
            Start                 End          diff
1 2017-12-04 17:25:00 2018-12-09 17:15:00 369.9931 days
2 2017-05-05 18:25:00 2019-05-05 18:24:00 729.9993 days

在您的问题中,您询问了有关拆分的问题。万一这仍然是您需要做的事情,创建日期时间仍然会帮助您。现在我们有了 datetime 对象而不是字符串,我们可以轻松地将列拆分为多个部分。

df$Start_Day <- day(df$Start)
df$Start_Month<- month(df$Start)
df$Start_Year <- year(df$Start)

等等。


推荐阅读