在R中提取id列-PRD前数字替换原列报错求助
解决方法
问题根源
你报错的核心原因是用了unique()——它会把提取后的结果去重,返回的唯一值数量远少于原数据的行数,而dplyr::mutate要求新生成的列必须和原数据框的行数完全一致,所以才会出现长度不匹配的错误。
正确实现方式
不需要用word+str_sub+unique的组合,直接用stringr里的逐行文本处理函数就能搞定,以下是两种靠谱的方法:
方法1:用str_extract精准提取数字部分
str_extract可以通过正则表达式匹配并提取-PRD前的数字:
library(dplyr) library(stringr) # 假设你的数据框名为df df <- df %>% mutate(id = str_extract(id, "\\d+(?=-PRD)"))
解释:\\d+匹配一个或多个数字,(?=-PRD)是正向预查规则,确保提取的数字后面紧跟-PRD,不会拿到多余内容。
方法2:用str_remove直接删除-PRD
如果你的id列里-PRD始终在末尾,直接删掉这部分更简单:
df <- df %>% mutate(id = str_remove(id, "-PRD$"))
解释:-PRD$匹配位于文本结尾的-PRD,str_remove会把这部分删除,剩下的就是你要的数字。
验证示例
假设原始分组数据是这样的:
df <- tibble( id = c("123-PRD", "456-PRD", "123-PRD", "789-PRD"), group = c("A", "A", "B", "B") )
用上面任意一种方法处理后,id列会变成c("123", "456", "123", "789"),完全匹配原数据行数,不会再报错。
内容的提问来源于stack exchange,提问作者MaxB
相关产品推荐
相关产品推荐

