R语言将df索引列转为普通列并将字符列转换为日期格式的方法
R语言行索引转日期列最简实现
方法1:tidyverse 套件(代码最简洁)
依赖tidyverse和lubridate包,代码可读性高:
library(tidyverse) library(lubridate) df_result <- df %>% # 将行索引转换为普通列,列名设为date_raw rownames_to_column("date_raw") %>% mutate( # 提取行名字符串中até后面的日期片段 date_str = str_extract(date_raw, "(?<=até )\\d{2}\\w{3}\\d{2}"), # 葡萄牙语日月年格式转日期类型 date = dmy(date_str), # 按需求偏移1天并调整为年/月/日格式,不需要偏移可删除+ days(1) date = format(date + days(1), "%Y/%m/%d") ) %>% # 把日期列放到第一列,删除中间辅助列 select(date, everything(), -date_raw, -date_str)
方法2:基础R实现(无需安装第三方包)
用原生函数完成,不需要额外安装依赖:
# 行索引转普通列 df$date_raw <- rownames(df) # 提取日期片段 df$date_str <- sub(".*até (\\d{2}\\w{3}\\d{2}).*", "\\1", df$date_raw) # 葡萄牙语格式转日期,根据系统环境调整locale参数即可 df$date <- as.Date(df$date_str, format = "%d%b%y", locale = "pt_BR.UTF-8") # 偏移1天并调整格式,不需要偏移可删除+1 df$date <- format(df$date + 1, "%Y/%m/%d") # 将日期列放到最前面,删除辅助列 df <- df[, c("date", setdiff(colnames(df), c("date", "date_raw", "date_str")))] # 可选:清空行索引 rownames(df) <- NULL
适配说明
你的行索引中月份为葡萄牙语缩写(Ago=8月、Set=9月),上述代码已适配该格式识别。如果生成的日期和你预期的交易日不一致,调整偏移天数或使用工作日偏移函数即可。
内容的提问来源于stack exchange,提问作者Vinícius Felizatti
相关产品推荐
相关产品推荐

