【发布时间】:2015-06-02 14:05:27
【问题描述】:
我有一个包含非结构化日期信息字段的数据集。我正在尝试将其转换为日期,但是该字段有 2 种日期形式,一种是上午 / 下午,另一种是 24 小时制。
如果我尝试直接转换它,它会中断并且显然给出错误的答案。
因此,在做了一些检查之后,我从一个简单的 if 函数开始。字段与 am/pm 之间的主要区别是字段的长度,所以我尝试了以下方法:
dateCheck <- function(x) {
if(nchar(x) > 17) {
strptime(x,"%m/%d/%Y %I:%M %p")
} else {
strptime(x,"%m/%d/%Y %H:%M")
}
}
这不起作用并返回以下错误:
条件的长度 > 1 并且只使用第一个元素
经过一番研究,我发现使用 if 函数存在一些问题,我可能应该使用 ifelse 并提出以下建议:
ifelse(nchar(x) > 17,strptime(x,"%m/%d/%Y %I:%M %p"),strptime(x,"%m/%d/%Y %H:%M"))
这真的把我的数据框弄乱了,给了我一个绝对的垃圾读数。 它最近也开始给我以下错误:
警告信息:1:在 ifelse(nchar(fb2$Date) > 17, strptime(fb2$Date, "%m/%d/%Y %I:%M %p"), : 项目数 replace 不是替换长度 2 的倍数:在 ifelse(nchar(fb2$Date) > 17, strptime(fb2$Date, "%m/%d/%Y %I:%M %p"), : 要替换的项目数不是替换长度的倍数
知道我应该怎么做吗?
编辑:使用示例数据
The type with the AM / PM
04/20/2015 3:47 pm
04/20/2015 3:32 pm
04/19/2015 12:45 pm
04/18/2015 9:00 pm
04/16/2015 2:52 pm
04/14/2015 4:40 pm
04/14/2015 10:48 am
04/14/2015 10:28 am
The type without
04/11/2015 11:28
04/10/2015 16:12
04/09/2015 16:44
04/08/2015 12:12
04/08/2015 11:38
04/07/2015 12:11
04/05/2015 08:45
这意味着数据的一个例子看起来像
04/16/2015 2:52 pm
04/14/2015 4:40 pm
04/14/2015 10:48 am
04/14/2015 10:28 am
04/11/2015 11:28
04/10/2015 16:12
04/09/2015 16:44
04/03/2015 08:57
04/02/2015 17:41
04/01/2015 11:44
03/28/2015 12:45 pm
03/28/2015 10:59 am
03/27/2015 4:13 pm
03/23/2015 5:02 pm
03/22/2015 4:06 pm
03/22/2015 1:10 pm
03/21/2015 8:20 am
03/19/2015 10:12 am
03/18/2015 1:41 pm
03/17/2015 1:41 pm
03/13/2015 4:03 pm
03/12/2015 15:19
03/12/2015 11:05
03/11/2015 16:12
03/11/2015 09:46
03/08/2015 19:29
【问题讨论】:
-
你能提供一些示例数据吗?此外,在您的
ifelse语句中,第一个strptime具有/%d#,第二个具有/%d。你是故意的吗? -
sapply(original_vector, dateCheck)应该可以工作,但ifelse也应该可以。正如约翰所说,我们需要数据。 -
样本数据为:一种类型为“04/14/2015 10:28 am”,另一种类型为“04/11/2015 11:28:00”
标签: r