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

R语言实现dataframe新增列统计行内匹配词表的唯一词数

R实现逐行统计文本列匹配指定词表的唯一词数量

你可以通过「逐行拆分文本-去重-和目标词表取交集-统计交集长度」的逻辑实现需求,下面给出两种常用实现方式:


测试数据

首先复现示例用到的测试数据集:

person_id <- c("001", "002", "003")
grocery_list <- c("apple orange orange kiwi", "eggs milk apple apple", "apple orange banana")
df <- data.frame(person_id, grocery_list)
fruit_list <- c("apple", "orange", "banana") 

方法1:Base R 实现(无第三方依赖)

不需要安装任何扩展包,直接用R内置函数即可完成计算:

df$fruit_count <- sapply(
  strsplit(df$grocery_list, split = " "),
  function(line_words) {
    # 对当前行的词汇去重,和目标词表取交集,统计交集元素个数
    length(intersect(unique(line_words), fruit_list))
  }
)

运行后打印df即可得到预期输出:

person_id             grocery_list fruit_count
1       001 apple orange orange kiwi           2
2       002    eggs milk apple apple           1
3       003      apple orange banana           3

方法2:Tidyverse 实现(适配管道工作流)

如果你平时用dplyr生态处理数据,可以用下面的写法,逻辑和Base R版本完全一致:

library(dplyr)
library(stringr)

df <- df %>%
  rowwise() %>%
  mutate(
    fruit_count = length(intersect(unique(str_split_1(grocery_list, " ")), fruit_list))
  ) %>%
  ungroup()

场景适配提示

  • 如果你的文本是多空格、制表符等任意空白分隔,可以把拆分参数从" "改成正则"\\s+",适配所有空白分隔场景
  • 如果需要忽略大小写匹配,可以在取交集前,把拆分得到的词汇统一转成小写(用tolower()函数),和同样转成小写的目标词表做匹配即可,避免大小写差异导致的匹配遗漏

内容的提问来源于stack exchange,提问作者RStudent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:01:24