R语言如何用gsub提取列表各元素首个值并去重,解决多余字符问题
多余字符的来源
你直接将列表对象A1传入gsub函数时,R会自动将每个列表元素转换为对应的字符形式输出,例如列表元素c("12", "1")会被隐式转换为字符串"c(\"12\", \"1\")",你写的正则仅删除了空格之后的内容,剩下的c("12",这类前缀就是你看到的多余字符。
正确解决方法
推荐直接提取每个列表元素的第一个值再去重,完全避开隐式字符转换的问题,有以下几种常用实现方式:
- 基础R写法(最通用,无需额外安装包)
# 得到字符型结果 v <- unique(sapply(A1, function(x) x[1])) # 如果需要转为数值型,再加一步转换 v <- as.numeric(unique(sapply(A1, function(x) x[1])))
- tidyverse生态purrr包简洁写法
library(purrr) v <- unique(map_chr(A1, 1)) # 转数值同理加as.numeric()即可
如果你一定要基于原有正则思路修改,也可以调整匹配规则删除前缀和多余符号,但兼容性差,不推荐:
v <- unique(gsub('c\\("|",.*', '', A1))
内容的提问来源于stack exchange,提问作者esti
相关产品推荐
相关产品推荐

