如何高效解析逗号分隔字符串为两个R向量并移除负前缀
简洁解析带正负标记的字符串为两个向量
这里给你一个高效又简洁的R实现方案,完美匹配你的需求:
vals <- "-AB, CV, CL, -TS" # 拆分字符串并清理多余空格 elements <- trimws(strsplit(vals, ",")[[1]]) # 分离正负向量 negative <- sub("^-", "", elements[grepl("^-", elements)]) positive <- elements[!grepl("^-", elements)]
运行后就能得到你想要的结果:
> negative [1] "AB" "TS" > positive [1] "CV" "CL"
简单解释下逻辑:
strsplit(vals, ",")[[1]]把原始字符串按逗号分割成字符向量,[[1]]是因为strsplit返回的是列表格式trimws()自动去除每个元素前后的空格,避免空格干扰后续的匹配判断grepl("^-", elements)用正则表达式匹配所有以-开头的元素,通过这个布尔索引提取出对应元素后,sub("^-", "", ...)把开头的负号移除,得到最终的negative向量positive向量则直接取所有不以-开头的元素即可
这个方案既简洁又易读,完全满足你的需求~
内容的提问来源于stack exchange,提问作者C. Braun




