R正则表达式处理数据框列表 提取人员、编码及首条日期数据
R语言多数据框信息提取解决方案
library(tidyverse) # 示例输入 v1 <- c("Worker: Joseph", "06/01/21", "12-00.07", "06/19/21", "useless", "06-11.85") v2 <- c("useless","99-08-70", "Worker: 3rd", "05/01/21", "useless", "25-57.99", "07/01/21") df1 <- data.frame(text = v1) df2 <- data.frame(text = v2) PDF_list <- list(df1, df2) # 核心处理逻辑 one_df <- map_dfr(PDF_list, function(df) { # 提取工作人员信息 worker <- str_subset(df$text, "Worker:") |> str_match("Worker:\\s*(\\w+)") |> _[1,2] # 提取第一个有效日期 date <- str_subset(df$text, "^\\d{2}/\\d{2}/\\d{2}$") |> _[1] # 提取所有符合要求的编码 code <- str_subset(df$text, "-\\d{2}[-.]") |> str_match("-(\\d{2})[-.]") |> _[,2] # 拼接成当前数据框对应的结果 tibble( Worker = worker, Code = code, Date = date ) }) # 查看结果 View(one_df)
核心调整说明
- 工作人员提取:通过
str_subset过滤含Worker的行后,用正则捕获组直接提取后面的标识,而非保留原整行文本 - 日期提取:严格匹配
dd/dd/dd格式的字符串,直接取第一个匹配结果,避免无效日期干扰 - 编码提取:匹配
-两位数字+点/横线的特征,用捕获组提取中间的两位标准编码,支持原示例中12-00.07、99-08-70两种分隔格式 - 循环优化:用
purrr::map_dfr替代for循环,直接拼接所有结果为总表,避免手动绑定列的长度不匹配问题
内容的提问来源于stack exchange,提问作者AndreASousa
相关产品推荐
相关产品推荐

