如何在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
相关产品推荐
相关产品推荐

