R语言列表处理需求:移除含数字的字符串元素
解决列表中过滤含数字字符串的问题
你的需求是从列表的字符向量里移除所有包含数字的元素,只保留纯文本的"jason"——之前用gsub的思路只是替换掉了字符串里的数字,并没有删除整个带数字的元素,这就是代码没达到预期的原因。
正确解决方案
我们需要用过滤逻辑来判断每个字符串是否包含数字,再保留符合要求的元素。用lapply遍历列表,结合grepl完成判断即可:
首先定义你的列表:
test <- list(c("jason", "mid1920s", "living2018"))
执行过滤操作:
test <- lapply(test, function(x) { # 筛选出不包含数字的字符串 x[!grepl("[[:digit:]]", x)] })
运行后,test就会变成你想要的结果:
list("jason")
代码解释
grepl("[[:digit:]]", x):对向量x中的每个字符串检查是否包含数字,返回一个逻辑向量(TRUE表示该字符串含数字)!grepl(...):对结果取反,得到哪些字符串不包含数字x[!grepl(...)]:根据这个逻辑向量筛选出符合要求的字符串
可选的tidyverse风格写法
如果你习惯用tidyverse工具链,也可以用purrr::map实现同样效果:
library(purrr) test <- map(test, ~ .x[!grepl("[[:digit:]]", .x)])
内容的提问来源于stack exchange,提问作者user8248672
相关产品推荐
相关产品推荐

