首页 > 解决方案 > 转换从 R 中的 excel 导入的自定义日期格式

问题描述

将 excel 表导入 R 后,我在一些事情上苦苦挣扎。

当我将它导入 R 时,它会将其更改为数值(与我在 Excel 中将单元格类型更改为“通用”的值相同)。我用谷歌搜索并尝试了几种方法来解决这个问题,例如以下

但是,我得到的是以下格式的日期:yyyy-mm-dd。此外,43466:44105 包括这些范围之间的每一天。

  1. 我应该一个一个地输入数字吗?即 443466(9 月 19 日)、43497(10 月 19 日)等等。
  2. 如何将其更改为“mm-yy”格式?

最重要的是,一旦我弄清楚如何将这些数字转换为日期,我不确定如何重命名所有日期列。我知道如何重命名多列内的多个元素,但不能将相同的函数(转换)应用于多列(据我所知)。

提前感谢您提供的任何帮助,如果这是一个愚蠢的问题,我们深表歉意,但我是一个尝试新手事物的新手。

标签: rexceldataframerename

解决方案


我创建了一些示例数据:

#// sample data
df <- structure(list(region = structure(c(2L, 1L, 3L), .Label = c("london", 
"north east", "west midlands"), class = "factor"), X43466 = c(5, 
4, 5), X43497 = c(6, 7, 8)), class = "data.frame", row.names = c(NA, -3L))
#// check the input
df
#>          region X43466 X43497
#> 1    north east      5      6
#> 2        london      4      7
#> 3 west midlands      5      8

以下是将列名转换为日期格式的方法:

#// get column names
names <- colnames(df)[2:3]
#// remove leading x
names <- sub('.', '', names)
#// convert to numeric
names <- as.numeric(names)
#// convert from Excel date format
names <- as.POSIXct(names * (60*60*24)
           , origin="1899-12-30"
           , tz="GMT")
#// write column names back
colnames(df)[2:3] <- as.character(names)

POSIX 转换的代码可能需要根据您的 Excel 设置和时区进行调整,但您应该能够对其进行排序。结果你应该得到这样的东西:

#// check the results
df
#>          region 2019-01-01 2019-02-01
#> 1    north east          5          6
#> 2        london          4          7
#> 3 west midlands          5          8

推荐阅读