You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中用str_extract提取数据框的年份和最后一个单词

问题修正方案

原代码存在的问题

  • mutate中两个新变量定义之间缺少逗号,属于语法错误
  • 提取年份的正则[:digit:]+未限定位数,若文本中存在其他数字可能误匹配,建议精准匹配4位年份
  • 测试数据的列名为names,但原代码中使用name,会导致找不到列的错误
  • 提取类别词的正则可更精准限定为low/middle/high,避免匹配到其他字母结尾的内容

修正后的代码

library(stringr)
library(dplyr)

# 先将测试数据赋值(方便复现)
extract <- structure(list(names = c("intrcn.yr.highcat2_revised2013 middle", 
"intrcn.yr.highcat2_revised2014 middle", "intrcn.yr.highcat2_revised2015 middle", 
"intrcn.yr.highcat2_revised2009 middle", "intrcn.yr.highcat2_revised2007 middle", 
"intrcn.yr.highcat2_revised2010 middle", "intrcn.yr.highcat2_revised2013 low", 
"intrcn.yr.highcat2_revised2014 low", "intrcn.yr.highcat2_revised2015 low", 
"intrcn.yr.highcat2_revised2017 high", "intrcn.yr.highcat2_revised2007 high", 
"intrcn.yr.highcat2_revised2010 high")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -12L))

# 处理数据
result <- extract |> 
  filter(names != "yr_qun") |> # 注意列名是names
  mutate(
    year = str_extract(names, "\\d{4}"), # 精准匹配4位数字年份
    class = str_extract(names, "\\b(low|middle|high)$") # 精准匹配结尾的目标类别词
  )

# 查看结果
print(result)

代码说明

  • \\d{4}:匹配连续4位数字,正好对应年份格式,避免误匹配其他零散数字
  • \\b(low|middle|high)$:\\b是单词边界,$匹配文本结尾,确保只提取最后一个目标类别词
  • 修正了列名不一致和语法逗号缺失的问题

内容的提问来源于stack exchange,提问作者skpak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:05:05