R语言中为dataframe数字列第3位后插入小数点的实现问题
错误原因
你之前使用的正则表达式([0-9])仅捕获单个数字,且替换规则中引用的\\2/\\3/\\4都属于不存在的捕获组,所以匹配到每一个数字都会自动追加小数点,才会得到不符合预期的输出。
正确实现方案
我们可以通过正则捕获前3位数字和后续剩余数字,只在两组之间插入小数点即可,代码如下:
# 示例数据 a <- data.frame(id=c(1,2,2,2,3),icd9=c("0781","00840","8660","7100","25011")) # 正确替换逻辑 a$icd9 <- sub(pattern = "^(\\d{3})(\\d+)$", replacement = "\\1.\\2", x = a$icd9) # 查看结果 print(a)
运行后输出结果和你预期完全一致:
id icd9 1 1 078.1 2 2 008.40 3 2 866.0 4 2 710.0 5 3 250.11
补充说明
这里使用sub而不是gsub即可,因为每个icd9字符串只需要执行一次替换操作,不需要全局匹配替换。
内容的提问来源于stack exchange,提问作者Muhammad
相关产品推荐
相关产品推荐

