【问题标题】:Excel Date Conversion Issue in RR中的Excel日期转换问题
【发布时间】:2018-05-10 13:45:57
【问题描述】:

在从 R 中提取 Excel 数据并转换为 R 中的日期时遇到问题。我有一个“time_period”列,该列以 Excel 日期格式从 Excel 中提取,具有 5 位数字(例如 41640)。

> head(all$time_period)
[1] "41640" "41671" "41699" "41730" "41760" "41791"

这些数字最初是 chr 格式,所以我将它们更改为数字类型:

all[,3] <- lapply(all[,3], function(x) as.numeric(as.character(x)))

完成后,我运行以下命令来格式化日期:

all$time_period <-format(as.Date(all$time_period, "1899-12-30"), "%Y-%m-%d")

但是,一旦此操作完成,time_period 列就是所有相同的日期(可能是该列中的第一个日期)。

> head(all$time_period)
[1] "2014-01-01" "2014-01-01" "2014-01-01" "2014-01-01" "2014-01-01" "2014-01-01" 

有什么建议吗?提前致谢。

【问题讨论】:

  • 你是用什么来读取excel文件的? readxl 通常会为您解决这个问题。

标签: r excel


【解决方案1】:

as.Date() 中设置origin 参数

这些数字指的是距origin 的距离,这取决于创建 excel 文件的机器。

  • 窗口:as.Date(my_date, origin = "1899-12-30")
  • 苹果机:as.Date(my_date, origin = "1904-01-01")

例如:

x <- c("41640","41671","41699","41730","41760","41791")
x <- as.numeric(x)
format(as.Date(x, "1899-12-30"), "%Y-%m-%d")

返回:

[1] "2014-01-01" "2014-02-01" "2014-03-01" "2014-04-01" "2014-05-01" "2014-06-01"

【讨论】:

  • 对于任何想知道"1899-12-30" 是什么意思的人,它是Windows 计算机上Microsoft Excel 的日期origin。如果使用 Mac,则原点应为 1904-01-01See this blog post for details。重要的是,原点是指创建文件的机器,而不是您从中读取文件的机器。例如,在 Windows 中创建的 excel 文件,然后在 Mac 上以 R 语言打开,应指定 origin = "1899-12-30"
【解决方案2】:

我相信这一行可以解决您的问题,您不需要格式化它,因为 as.Date 函数的默认值为“%Y-%m-%d”。

 time_period = c("41640", "41671", "41699", "41730", "41760", "41791")

 as.Date(as.numeric(time_period), origin =  "1899-12-30").

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2017-12-17
    • 2010-12-19
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多