r - 如何计算R中数据框的jaccard相似度?
问题描述
我正在尝试使用 Jaccard 相似度查找相似的用户。
我想改变原来的df,比如结果df。
结果 df 列值是交集/并集。
例如..
用户 1 和用户 2 的相似度为 1/2。
1/2 = 两个用户共同拥有的项目数/两个用户拥有的项目总数
这样,我想创建一个计算所有用户相似度的结果df。
我该怎么办?
解决方案
编写一个函数,计算两个用户共有的项目数除以项目总数。
calc <- function(x, y) {
sum(x == 'Y' & y == 'Y')/sum(x == 'Y' | y == 'Y')
}
按行拆分数据并使用outer
:
tmp <- asplit(df, 1)
outer(tmp, tmp, Vectorize(calc))
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1.000 0.5 0.0 0.333 0.4
#[2,] 0.500 1.0 0.0 0.000 0.2
#[3,] 0.000 0.0 1.0 0.000 0.4
#[4,] 0.333 0.0 0.0 1.000 0.4
#[5,] 0.400 0.2 0.4 0.400 1.0
数据
如果您以可重现的格式而不是图像提供数据,那将会很有帮助。
df <- data.frame(item1 = c('Y', 'Y', 'N', 'N', 'Y'),
item2 = c('Y', 'N', 'N', 'Y', 'Y'),
item3 = c('N', 'N', 'Y', 'N', 'Y'),
item4 = c('N', 'N', 'Y', 'N', 'Y'),
item5 = c('N', 'N', 'N', 'Y', 'Y'))
推荐阅读
- reactjs - 来自单独组件的 react-tabs Tablist
- javascript - 使用 json 文件创建动态反应表单 - Angular
- go - 如何创建一个读取前 N 个字节一次然后其余的读取器?
- kubernetes - 控制绿蓝部署 Kubernetes
- php - 对 laravel 中的页面集使用独立的 app.blade
- typescript - Power BI Desktop 是否有任何开发人员选项?
- php - Docker & Symfony 3.4
- reactjs - 使用 withStyles 和 withTranslation HOC 包装 React 组件后,Typescript 显示错误
- c++ - “构建成功”但“当前不会命中断点”
- c - 意外的 IOCTL 发送到我的 uclinux (ARM) 驱动程序