如何用R提取字符串中倒数第二个空格前的内容?
解决方案
这里提供两种简单的实现方法:
方法1:正则表达式替换
直接用sub()函数匹配并移除字符串末尾的两个空格分隔项:
# 单个字符串的情况 x <- "BOY MAN EL PASO ND 0023256000" result <- sub("\\s+\\S+\\s+\\S+$", "", x) # 输出:"BOY MAN EL PASO" # 处理向量(比如你的output$CUSTOMER) output$CUSTOMER_CLEAN <- sub("\\s+\\S+\\s+\\S+$", "", output$CUSTOMER)
正则表达式说明:
\\s+:匹配一个或多个空格\\S+:匹配一个或多个非空格字符$:匹配字符串结尾
整体意思是匹配末尾的两个由空格分隔的片段,并替换为空字符串,留下前面的内容。
方法2:拆分后重组字符串
先拆分字符串为单个元素,取前总长度-2个元素,再合并为字符串:
# 单个字符串的情况 x <- "BOY MAN EL PASO ND 0023256000" parts <- strsplit(x, "\\s+")[[1]] result <- paste(parts[1:(length(parts)-2)], collapse = " ") # 处理向量的情况 output$CUSTOMER_CLEAN <- sapply(strsplit(output$CUSTOMER, "\\s+"), function(parts) { paste(parts[1:(length(parts)-2)], collapse = " ") })
原代码失效原因
你用substr()时,第二个参数传入的是sapply(strsplit(...), tail, 2),但tail(2)返回的是最后两个字符串元素(比如c("ND", "0023256000")),而substr()需要的是数字类型的位置索引,类型不匹配导致执行失败。
内容的提问来源于stack exchange,提问作者WantaghMomma
相关产品推荐
相关产品推荐

