首页 > 解决方案 > 将 Excel 日期转换为日期,同时在同一列中保留“非日期”字符串

问题描述

我的数据集中有一个包含日期和文本的特定列。因此,我使用的 read_xls 函数将整个列导入为类“字符”。因此,日期恢复为其在 excel 中的基础日期代码(43348、43347 等)。

我的数据的示例向量以及我要完成的工作如下:

> x<- c("43347", "43348", "OPEN")
> x<- as.Date(x, format = "%m/%d/%Y", origin = "1899-12-30")

结果是 x 中的所有值都变为“NA”。

有谁知道我如何指示 R 仅将 43347 和 43348 更改为指定日期并保持“打开”状态?我应该使用 read_xls 以外的东西吗?

免责声明:我正在使用大型数据集,因此手动拆分列是不切实际的,例如:

> x1<- c(43347, 43348)
> y1<- c("OPEN")

想象一下这个具有 1500 多个值的向量。

标签: rexceldate

解决方案


这是你想要的?

数据:

x <- c("43347", "43348", "OPEN")

代码:

ifelse(is.na(as.numeric(x)),x, as.character(as.Date(as.numeric(x), origin = "1899-12-30")))

结果:

#[1] "2018-09-04" "2018-09-05" "OPEN"    

更快的版本:

IND <- !is.na(as.numeric(x))
x[IND] <- as.character(format(as.Date(as.numeric(x[IND]), origin = "1899-12-30"), format = "%m/%d/%Y"))
remove(IND)
x
#[1] "09/04/2018" "09/05/2018" "OPEN"  

推荐阅读