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

如何用dplyr计算R数据框两列逐行的Jaccard相似度索引

问题原因

你当前代码返回全0的核心原因是:address和gmap_var两列存储的都是单个完整字符串,而intersect()/union()对长度为1的字符串向量计算时,只有两个字符串完全相等才会得到非0交集长度,你的示例数据中没有完全相等的两个字段值,因此结果全为0。

解决方法

你需要先把每行的地址字符串按分隔符拆分为独立的片段/词向量,再计算Jaccard相似度,代码示例如下:

library(dplyr)
library(stringr)

example <- example %>%
  rowwise() %>%
  mutate(
    # 按逗号+空格拆分字符串为向量,统一转大写避免大小写差异影响计算
    address_split = str_split(address, ",\\s*") %>% unlist() %>% str_to_upper(),
    gmap_split = str_split(gmap_var, ",\\s*") %>% unlist() %>% str_to_upper(),
    # 计算Jaccard相似度
    jaccard_sim = length(intersect(address_split, gmap_split))/length(union(address_split, gmap_split))
  ) %>%
  # 可选:删除中间生成的拆分列
  select(-address_split, -gmap_split)

如果需要更细粒度的分词(比如按空格拆分每个独立单词),可以把拆分规则改成str_split(address, ",\\s*|\\s+"),会同时按逗号、空格拆分所有词汇,相似度计算精度会更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:24:03