如何提取出现在数据框列中的向量元素?
解决思路与代码方案
首先咱们先理清问题根源:你之前用的grep默认是部分匹配,所以23会误匹配到line_223.1和line_223.2里的"23"片段,这就是导致异常的原因。咱们需要做的是精确匹配df$lines中_和.之间的数字,再和vec比对。
下面给你两种实用的解决方案:
方法一:提取目标数字后直接匹配(直观易懂)
先从df$lines里提取出_和.之间的数字,再筛选vec中存在于这些数字里的元素:
# 先加载stringr包(如果没安装先运行 install.packages("stringr")) library(stringr) # 提取df$lines中_之后、.之前的数字,转成数值类型 extracted_numbers <- as.numeric(str_extract(df$lines, "(?<=_)\\d+(?=\\.)")) # 筛选vec中存在于extracted_numbers的元素 vec2 <- vec[vec %in% extracted_numbers] # 查看结果 vec2 # 输出:[1] 21 25
方法二:用正则精确匹配(无需额外包)
通过构建精确匹配的正则表达式,确保只匹配_数字.的格式,避免部分匹配:
# 遍历vec中的每个元素,检查是否有df$lines符合精确匹配规则 vec2 <- vec[sapply(vec, function(x) { # 构建正则:_ + 目标数字 + .(.需要转义成\\.) any(grepl(paste0("_", x, "\\."), df$lines)) })] # 查看结果 vec2 # 输出:[1] 21 25
两种方法都能得到你想要的vec2: 21, 25,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者Maya Gosztyla
相关产品推荐
相关产品推荐

