在R语言中按条件替换数值的前两位数字
识别码前两位替换(保留后五位)解决方案
这里给你两种实用的方法,按需选择:
方法1:字符串替换(直观易懂)
把识别码转成字符串后,替换开头两位为"35",再转回数值类型,base R或stringr包都能实现:
Base R 写法
# 先给数据框列命名,方便后续操作 names(df) <- "id" # 执行替换 df$id <- as.numeric(sub("^\\d{2}", "35", as.character(df$id)))
as.character(df$id):把数值型的识别码转成字符串sub("^\\d{2}", "35", ...):用正则匹配字符串开头的两位数字,替换成"35"as.numeric():把处理后的字符串转回数值类型
stringr 包写法(更简洁)
如果常用tidyverse工具,用stringr的str_replace更省心:
library(stringr) names(df) <- "id" df$id <- as.numeric(str_replace(as.character(df$id), "^..", "35"))
^..是简化的正则,匹配开头任意两个字符,直接替换成"35",逻辑和base R一致。
方法2:数值运算(高效无类型转换)
如果你的识别码都是固定7位数字,用数值计算更高效,不用来回转换类型:
names(df) <- "id" df$id <- 3500000 + (df$id %% 100000)
df$id %% 100000:取识别码的后五位(对100000取模,刚好保留最后五位)3500000:对应"35"开头的前两位数值,加上后五位就得到目标识别码
两种方法都能完美把3400808变成3500808,3400809变成3500809,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Amelie Brummer
相关产品推荐
相关产品推荐

