R中如何通过匹配条件筛选向量并提取保单号/合同号
问题根因
- R 中
||是标量短路径或运算符,仅支持输入长度为 1 的逻辑值,你代码中||左右两侧是提取得到的字符串向量,完全不符合运算符的输入要求,因此触发类型报错。 - 当某类编号不存在时,
kk[grepl(xxx, kk)]会返回长度为 0 的空向量,后续字符串处理也会得到空值,不能直接用逻辑或做分支选择。
修复方案
方案1(更简洁,适配你的场景)
因为你明确每次输入仅会出现「合同号」或「保单号」中的一种,直接用正则匹配两种编号的行即可:
library(stringr) # 匹配包含任意一类编号的行 match_line <- kk[grepl("(Contract|Policy) Number", kk)] # 提取冒号后内容并去除首尾空格 policy_nr <- str_trim(sub(".*:", "", match_line), side = "both")
方案2(兼容原逻辑思路)
如果你需要保留分开判断的逻辑,用if-else分支替代非法的||写法即可:
library(stringr) if (any(grepl("Contract Number", kk))) { policy_nr <- str_trim(sub(".*:", "", kk[grepl("Contract Number", kk)]), side = "both") } else { policy_nr <- str_trim(sub(".*:", "", kk[grepl("Policy Number", kk)]), side = "both") }
内容的提问来源于stack exchange,提问作者Chennai Cheetah
相关产品推荐
相关产品推荐

