R语言中检测斜杠/失败,求正确提取数值的实现方法
解决R中日期列数值提取与格式保留问题
原代码问题分析
你的代码存在两个核心问题:
str_detect参数顺序错误:该函数第一个参数是待检测的字符串向量,第二个才是匹配模式,你写反成str_detect("/", MR_all$period),导致无法正确识别含斜杠的行。case_when条件逻辑错误:你用子集后的向量作为判断条件,不符合case_when逐行判断的语法要求。
修正后的代码
# 加载所需包(如果未加载) library(stringr) library(dplyr) # 正确检测含斜杠的行 detect_slash <- str_detect(MR_all$period, "/") # 生成目标列period_3 MR_all <- MR_all %>% mutate(period_3 = case_when( detect_slash ~ period, # 含斜杠的行保留原内容 TRUE ~ gsub("\\D", "", period) # 不含斜杠的行提取所有数值 ))
代码说明
str_detect(MR_all$period, "/"):遍历period列每一行,判断是否包含斜杠,返回对应布尔向量。case_when逐行处理:- 若行含斜杠,直接保留原
period内容; - 其他情况(纯年份、字符描述行),用
gsub("\\D", "", period)删除所有非数字字符,仅保留数值部分。
- 若行含斜杠,直接保留原
内容的提问来源于stack exchange,提问作者Aby Ramata Almamy Mbaye
相关产品推荐
相关产品推荐

