R语言中如何按字符串长度条件提取子串?
解决向量级条件下的子串提取问题
你之前的问题出在两个关键点:
- 普通
if只能处理单个逻辑值,遇到向量条件时只会判断第一个元素,所以出现警告且只执行了第一个分支 - 把整个
mutate操作塞进ifelse里是错误用法,ifelse是用来生成向量的,不是用来控制数据框修改流程的
下面给你两种高效的解决方案,适配大数据量场景:
方法一:用dplyr的向量化操作(推荐)
直接在mutate里对每个元素用ifelse判断长度,分别提取子串,全程向量化处理,效率拉满:
library(dplyr) E <- E %>% mutate(prueba2 = ifelse(nchar(identhog) == 10, substr(identhog, 2, 6), substr(identhog, 3, 7)))
方法二:基础R写法(无需加载dplyr)
直接给新列赋值,用ifelse处理每个元素的子串提取:
E$prueba2 <- ifelse(nchar(E$identhog) == 10, substr(E$identhog, 2, 6), substr(E$identhog, 3, 7))
这两种写法都是对向量里的每个元素单独判断处理,不会只看第一个元素,而且是一次性完成计算,大数据量下也能顺畅运行。
内容的提问来源于stack exchange,提问作者Alexis SM
相关产品推荐
相关产品推荐

