【问题标题】:Convert Excel Date to Date while preserving "non Date" strings in the same column将 Excel 日期转换为日期,同时在同一列中保留“非日期”字符串
【发布时间】:2019-02-23 18:24:13
【问题描述】:

我的数据集中有一个包含日期和文本的特定列。因此,我使用的 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 更改为指定日期并保持“OPEN”不变?我应该使用 read_xls 以外的东西吗?

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

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

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

【问题讨论】:

  • 您希望该列的数据类型是什么? R 不支持 data.frame 列中的混合类型(至少不使用列表列,这使得使用它变得更加困难)。您是否希望它们最终都成为字符值?

标签: r excel date


【解决方案1】:

这是你想要的?

数据:

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"  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2014-09-12
    相关资源
    最近更新 更多