我正在使用read_excel
从Excel将数据阅读到R中。其中一列date_time
具有混合格式,并作为字符向量读入。下面是行的示例。
date_time <- c(
45144.4762962963,
45144.475138888891,
"14-08-2023 10:38:54 AM",
"14-08-2023 10:37:03 AM",
"24-05-2023 9:29:44 AM",
"24-05-2023 9:27:18 AM",
45113.462395833332,
45113.461261574077,
"15-05-2023 1:47:12 PM",
44988.399664351855
)
data <- tibble(date_time)
混合格式的原因似乎是,当数据最初被解析到Excel表中时,它期望的格式是mm-dd-yyyy hh:mm:ss,但实际数据是dd-mm(切换)。结果是,如果第一个数字大于12,则将其解析为Excel中的文本变量(例如,data
的第3行)。然而,当日期不明确时,它会以Excel的日期格式进行解析,日期和月份错误地切换(例如,data
的第1行应为2023年6月8日上午11:25:52,而不是2023年8月6日)。
如何将其转换为具有正确日期的一致dttm
对象?我想我可以通过编辑我正在阅读的Excel文件来做到这一点,但由于这将是一个持续的问题,我想在R中找到一种方法来做到这一点。
2条答案
按热度按时间ccgok5k51#
可能有一种更整洁的方法来完成这项工作,但是下面的代码将为您的格式组合完成这项工作。
首先用
parse_date_time
转换简单的一个,然后将数字转换为日期时间,并按正确的顺序阅读日期。lzfw57am2#
我将创建两个功能。第一个是将数字日期转换为R日期时间对象:
请参阅here了解为什么Excel的起源是1899年12月30日(在Windows上)。
我们还创建了一个函数来转换字符日期:
参见this answer了解
strptime()
符号的含义。字符串函数将为数字日期返回
NA
,反之亦然。这意味着我们可以coalesce()
结果:注意:您将收到
NAs introduced by coercion
警告。这是根据设计-我们期望NA
用于无效格式,这就是为什么我们可以coalesce()
。