R语言中批量将Excel导入的数字列名转换为d/m/y日期格式的问题求助
R语言中批量将Excel导入的数字列名转换为d/m/y日期格式的问题求助
我太懂你这种头疼的感觉了——Excel里好好的日期,导入R后变成一堆像"44983"的序列号列名,还得在R里批量转成想要的d/m/y格式对吧?你之前的代码逻辑有点小问题,导致修改没生效,咱们一步步来搞定:
首先,先把数据完整读进来,别着急在read_excel里直接改列名,先拿到原始数据框:
library(readxl) # 先读取数据,保留原始列名 backlog <- read_excel("./Weekly/Weekly_Cancer_62d_PTL_Tracker.xlsx", sheet = "Provider Trends", range = "B24:CR44")
接下来单独处理列名:咱们保留第一列的原名,把剩下的字符型序列号转成日期再格式化:
# 生成新的列名向量 new_col_names <- c( names(backlog)[1], # 保留第一列"Backlog 62d+"的原始名称 # 把后面的字符型数字转成Excel对应的日期,再格式化为d/m/y样式 format( as.Date(as.numeric(names(backlog)[-1]), origin = "1899-12-30"), "%d/%m/%Y" # %d代表日,%m代表月,%Y代表4位年份,刚好匹配你要的d/m/y格式 ) ) # 给数据框替换上新的列名 names(backlog) <- new_col_names
为啥你之前的代码没生效?
你把setNames直接嵌套在read_excel的参数里,这时候read_excel还没完成数据读取,根本没办法正确获取列名来处理,所以修改自然没应用到最终的数据框上。分开读取和修改列名的逻辑,就能正常生效啦。
额外提醒
- 如果你的Excel是Mac版本,日期原点是
1904-01-01,这时候要把origin参数改成这个值,否则转换出来的日期会出错。 - 要是除了第一列外,还有非数字的列名,
as.numeric会返回NA,这时候可以先检查异常列:which(is.na(as.numeric(names(backlog)[-1]))),把这些列单独调整处理。
备注:内容来源于stack exchange,提问作者Emma541
相关产品推荐
相关产品推荐

