在R中如何替换向量内数字格式字符串、保留普通文本元素不变
实现方案
方案1:基础R实现(无需安装额外包)
直接用正则匹配全数字元素后批量替换即可,代码如下:
# 定义原始向量(注意尽量不要用`vector`作为变量名,它是R的内置函数名,容易引发冲突) vec <- c("1","2","0", "10", "name", "hello") # 匹配完全由数字组成的元素,替换为test vec[grepl("^\\d+$", vec)] <- "test" # 输出结果 vec
运行后输出结果:
[1] "test" "test" "test" "test" "name" "hello"
正则说明:^\\d+$中^代表字符串开头,$代表字符串结尾,\\d匹配任意数字,三者结合可以保证只有全数字的元素会被匹配,不会误判包含数字的混合文本。
如果后续需要匹配带负号、小数点的数字,可以把正则替换为^-?\\d+(\\.\\d+)?$,支持正负整数、小数的识别。
方案2:tidyverse生态实现(stringr包)
如果习惯用tidyverse系列工具,可以用str_replace_all一步完成替换:
library(stringr) vec <- c("1","2","0", "10", "name", "hello") vec <- str_replace_all(vec, "^\\d+$", "test")
运行效果和基础R方案完全一致。
内容的提问来源于stack exchange,提问作者Workhorse
相关产品推荐
相关产品推荐

