You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取出现在数据框列中的向量元素?

解决思路与代码方案

首先咱们先理清问题根源:你之前用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:36:58