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

使用dplyr按目标术语列表grep匹配后分组汇总value列均值

解决代码

首先加载依赖、定义数据和目标术语:

library(dplyr)
# 原始数据
df <- data.frame(ID = c("A", "B", "C", "D"),
                 term = c("cat,dog,snake", "cat,eel", "fish,eel", "fish,dog"),
                 value = c(10, 50, 3, 6))
# 目标查询术语向量
target_terms <- c("dog", "fish", "eel")

核心计算逻辑(无需拆分原数据行):

# 遍历每个目标术语,匹配对应行计算均值后整理成数据框
result <- sapply(target_terms, function(x) {
  # 加\\b单词边界避免子串误匹配,不需要可删除
  mean(df$value[grepl(paste0("\\b", x, "\\b"), df$term)])
}) %>% 
  enframe(name = "term", value = "mean")

输出结果

> print(result)
# A tibble: 3 × 2
  term   mean
  <chr> <dbl>
1 dog     8  
2 fish    4.5
3 eel    26.5

原代码问题说明

你之前的写法错误原因是grepl不支持直接传入术语列表作为匹配模式,它的向量化逻辑是逐位置对应匹配,无法实现每个术语单独匹配所有行的需求。
本方案仅遍历你要查询的目标术语列表,遍历次数等于目标术语的数量,不会对原数据的行做扩容,完全适配term字段包含大量选项的场景,执行效率远高于拆分term的方案。

内容的提问来源于stack exchange,提问作者R-MASHup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:15:02