r - 如何在R中用空格分隔包含日期和时间的列
问题描述
我有两列,一列是开始日期和时间,一列是结束日期和时间。我想将它们分成四列:Start_date、Start_time、End_date、End_time。它们由空格分隔(每列的格式为“12/04/2017 05:25 PM”)。最终我需要找到开始日期和时间与结束日期和时间之间的差异。我是 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)
等等。
推荐阅读
- javascript - 如何使用 chrome 配置文件“managed_javascript_blocked_for_urls”阻止第三方 JS
- r - 指定要在留一法(jack-knife)交叉验证中使用的选定数据范围,以便在 caret::train 函数中使用
- assembly - 大会 8086:如何通过循环和视频存储器表示感谢
- python-3.x - OSError: [WinError 10013] 在 PyCharm 环境中运行时,尝试以访问权限禁止的方式访问套接字
- sql-server - 在 Azure SQL Server 上安装和配置 Polybase - 找不到存储过程“sp_configure”
- r - 在小标题中添加和删除字符串组件
- javascript - 在构造函数的构造函数中不调用 setter 中的验证
- file - golang 中偶尔长(500+ 毫秒)写入或刷新时间
- php - 如何使用自定义面板 Drupal 8 扩展管理配置菜单
- pagination - 具有自定义帖子类型的木材分页