我被困在一个包含日期和时间的专栏中。
我的专栏看起来像这样:
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
答案 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)
通过查看您的代码,您似乎实际上正在尝试转换为Date
和Time
类(您已使用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日期工具更容易使用。