如何使用R清理dataframe中混乱的日期格式并提取年份
R实现多格式日期列提取首年份方案
核心思路
所有目标年份均为4位连续数值,无需适配各类日期格式,直接提取每个单元格中第一个出现的4位连续数字即可,空值、NA值保留原有状态。
注意:示例数据中第9行的NA为字符串格式,可先转为R原生缺失值再做处理,结果更符合预期。
方法1:base R实现
# 先将字符串"NA"转为原生缺失值 df$Date[df$Date == "NA"] <- NA_character_ # 正则匹配提取第一个4位数字 df$year <- sub(".*?(\\d{4}).*", "\\1", df$Date) # 如需转为数值型可执行下行 # df$year <- as.integer(df$year)
方法2:tidyverse实现(可读性更高)
library(dplyr) library(stringr) df <- df %>% # 先处理字符串NA mutate(Date = na_if(Date, "NA")) %>% # 提取第一个4位数字,空字符串保留为空 mutate(year = case_when( Date == "" ~ "", TRUE ~ str_extract(Date, "\\d{4}") ))
执行以上代码后得到的结果完全匹配预期输出。
内容的提问来源于stack exchange,提问作者Ridwan Shittu
相关产品推荐
相关产品推荐

