R中的日期和时间列

时间:2016-12-26 17:40:51

标签: r datetime dplyr

我被困在一个包含日期和时间的专栏中。

我的专栏看起来像这样:

Date.Rept
12/1/2016
12/1/2013 12:07 AM
12/1/2016  7:76 AM 
12/1/2016 11:54 AM
12/2/2016  1:34 PM

我的目标是将日期和时间分成两个单独的列。

我首先将数据框中的所有内容更改为as.character,然后使用以下代码获取该列中的日期。

如何将时间提取到一个单独的列中,以便我有两列只有数据而另一列有时间?

使用的代码:crime$Date.Rept <- as.Date(crime$Date.Rept, "%m/%d/%Y %H:%M")

结果:2016-12-01

3 个答案:

答案 0 :(得分:1)

我们可以尝试使用来自extract的{​​{1}},将一个或多个非空白字符作为一组(tidyr)后跟零个或多个空格分隔成两列( (\\S+))后跟任何字符作为第二个捕获组(\\s*

(.*)

或其他选项library(tidyr) extract(crime, Date.Rept, into = c("Date", "Time"), "(\\S+)\\s*(.*)") # Date Time #1 12/1/2016 #2 12/1/2013 12:07 AM #3 12/1/2016 7:76 AM #4 12/1/2016 11:54 AM #5 12/2/2016 1:34 PM 来自sub/read.csv

base R

答案 1 :(得分:1)

通过查看您的代码,您似乎实际上正在尝试转换为DateTime类(您已使用as.Date),基本R没有{ {1}}类,但您可以尝试Time。我正在添加一个前置步骤,以便处理缺少时间的值(我不知道时间是data.table)但是生成的列很容易操作(添加/订阅/过滤/等等)< / p>

7:76

答案 2 :(得分:0)

选项1: 看起来你的数据可能是strsplit()的一个很好的候选者。此选项将需要一些额外的工作,因为此strsplit()函数将生成拆分向量值的列表。

crime2 <- strsplit(crime$Date.Rept, " ")

选项2:我个人的偏好是使用tidyr()包分割您的数据。

crime2 <- separate(crime, Date.Rept, c("date.value", "time.value"), sep = " ")

这将创建一个数据框,然后需要将其附加回原始文件。您可以通过以下方式轻松完成此任务。

crime3 <- cbind(crime,crime2)

对于任何其他日期操作或比较,您可以考虑使用lubridate()包。我发现这个包比基本r日期工具更容易使用。