在R语言中从County_and_Quarter列提取年份并新增列的问题
从County_and_Quarter列提取年份的解决方案
核心问题分析
你之前的代码只针对单个年份判断,当新增2014的判断时,如果直接替换或顺序错误,会导致已匹配的2013值被覆盖。更高效的方式是直接提取字符串中的四位年份,而非逐个判断。
推荐方法:正则表达式提取(简洁通用)
利用stringr包的str_extract函数,通过正则匹配连续四位数字(对应年份格式),一次性提取所有年份:
library(dplyr) library(stringr) PA_State_County_Level_Sentencing_with_Year <- PA_State_County_Level_Sentencing %>% mutate(Year = str_extract(County_and_Quarter, "\\d{4}"))
\\d{4}是正则表达式,专门匹配连续四位数字,完美适配你的年份格式,不管是2013、2014还是其他年份都能准确提取。
备选方法:嵌套if_else(仅作参考)
如果必须使用条件判断,需要通过嵌套if_else确保每个年份的判断逻辑不冲突:
PA_State_County_Level_Sentencing_with_Year <- PA_State_County_Level_Sentencing %>% mutate(Year = if_else(str_detect(County_and_Quarter, "2013"), "2013", if_else(str_detect(County_and_Quarter, "2014"), "2014", # 可继续添加其他年份判断,或用正则兜底提取剩余年份 str_extract(County_and_Quarter, "\\d{4}"))))
注意:这种方法扩展性差,新增年份时需不断嵌套,不如正则表达式简洁。
结果验证
提取完成后,可通过以下命令确认年份提取是否正确:
table(PA_State_County_Level_Sentencing_with_Year$Year)
内容的提问来源于stack exchange,提问作者c.ferguson
相关产品推荐
相关产品推荐

