如何用R中的空格分隔包含日期和时间的列

时间:2018-07-14 04:47:08

标签: r

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

1 个答案:

答案 0 :(得分:1)

出于这个问题的目的,我假设您在美国,因此您提供的示例日期是指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

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

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

以此类推。