R语言拆分结构不同的列提取姓氏和城市的解决方案
提取姓氏与城市字段的实现方案
由于你的数据列结构不统一,用固定列数的separate()拆分无法适配不同行的字段数量,直接按规则用正则提取是更高效的方案,适配性更强:
方案1:tidyverse 套件实现(推荐)
借助stringr的正则提取函数直接匹配目标内容,无需拆分多列:
# 加载依赖包 library(tidyverse) df <- df %>% mutate( # 提取第一个逗号前的内容作为姓氏 姓氏 = str_extract(Name, "^[^,]+"), # 提取最后一个空格后、末尾英文句号前的内容作为城市 城市 = str_extract(Name, "(?<= )[^ ]+(?=\\.$)") )
规则说明:
- 姓氏正则
^[^,]+:从字符串开头匹配所有非逗号字符,正好对应第一个逗号前的内容 - 城市正则
(?<= )[^ ]+(?=\\.$):先匹配最后一个空格的位置,再读取所有非空格字符,直到字符串末尾的英文句号为止,正好命中目标城市字段
方案2:基础R实现(无需加载第三方包)
用基础的正则替换函数也可以实现相同效果:
# 提取姓氏 df$姓氏 <- sub(",.*", "", df$Name) # 提取城市 df$城市 <- sub(".* (.*)\\.$", "\\1", df$Name)
如果存在部分行不符合规则导致提取出NA的情况,可以额外加过滤或异常值修正逻辑处理即可。
内容的提问来源于stack exchange,提问作者Serena
相关产品推荐
相关产品推荐

