R语言开发:拆分列b末尾SX/DX并生成新列的实现方案
R语言实现文本后缀拆分与原列修改
以下是两种实现方案,分别基于base R和stringr包,均可满足需求:
方案一:使用base R(无需额外安装包)
# 加载示例输入数据 a <- read.table(text=" Num X b 12 3 \"ab SX\" 13 35 \"sd DX\" 14 35 \"dh af SX\" 15 10 \"sd\"", header=TRUE, stringsAsFactors=FALSE) # 1. 提取末尾的SX/DX到新列DXSX,无匹配则填0 a$DXSX <- sub(".*\\s(SX|DX)$", "\\1", a$b) a$DXSX[a$DXSX == a$b] <- "0" # 2. 修改原列b,移除末尾的SX/DX(若存在) a$b <- sub("\\s(SX|DX)$", "", a$b) # 查看最终结果 print(a)
方案二:使用stringr包(语法更直观)
先安装并加载stringr包:
install.packages("stringr") library(stringr)
然后执行处理代码:
# 加载示例输入数据 a <- read.table(text=" Num X b 12 3 \"ab SX\" 13 35 \"sd DX\" 14 35 \"dh af SX\" 15 10 \"sd\"", header=TRUE, stringsAsFactors=FALSE) # 1. 提取后缀并处理无匹配情况 a$DXSX <- str_extract(a$b, "\\s(SX|DX)$") %>% str_trim() %>% replace_na("0") # 2. 移除原列的后缀内容 a$b <- str_remove(a$b, "\\s(SX|DX)$") %>% str_trim() # 查看最终结果 print(a)
代码说明
- 正则表达式
\\s(SX|DX)$用于匹配字符串末尾的空格+SX/DX,$确保仅匹配结尾部分,避免误匹配中间的SX/DX。 - base R方案中,
sub函数完成匹配替换,通过判断替换后是否与原字符串一致,标记无匹配的情况为"0"。 - stringr方案中,
str_extract提取目标后缀,str_remove移除原列的后缀,replace_na直接将无匹配的NA转为"0",逻辑更清晰。
运行任意一种方案后,得到的结果与示例输出完全一致。
内容的提问来源于stack exchange,提问作者Inuraghe
相关产品推荐
相关产品推荐

