当前位置: 首页 > 知识库问答 >
问题:

计算R列发生的相似性

卢黎昕
2023-03-14

我有以下数据

df <- data.frame(
  group = c('r1','r2','r3','r4'),
  X1 = c('A','B','C','K'),
  X2 = c('A','C','M','K'),
  X3 = c('D','A','C','K')
)

> df
  group X1 X2 X3
1    r1  A  A  D
2    r2  B  C  A
3    r3  C  M  C
4    r4  K  K  K

我想根据列X1X2

> df
  group X1 X2 X3 similarity_score
1    r1  A  A  D .67
2    r2  B  C  A .33
3    r3  C  M  C .67
4    r4  K  K  K 1

我怎样才能做到这一点?

共有3个答案

赵高韵
2023-03-14

tidyverse解决方案:

library(tidyverse)

df %>% 
  rowwise() %>% 
  mutate(
    similarity_score = max(colMeans(outer(c_across(-group), c_across(-group), `==`)))
  ) 

或者,你可以做一个nest解决方案,而不是cross

df %>% 
  group_by(group) %>% 
  nest(data = -group) %>% 
  rowwise() %>% 
  mutate(
    similarity_score = max(colMeans(outer(unlist(data), unlist(data), `==`)))
  ) %>% 
  unnest(data)

  group X1    X2    X3    similarity_score
  <chr> <chr> <chr> <chr>            <dbl>
1 r1    A     A     D                0.667
2 r2    B     C     A                0.333
3 r3    C     M     C                0.667
4 r4    K     K     K                1   
龚寂弦
2023-03-14

你可以做的

df$similarity <- round(apply(df[-1], 1, function(x) max(table(x))/length(x)), 2)

df
#>   group X1 X2 X3 similarity
#> 1    r1  A  A  D       0.67
#> 2    r2  B  C  A       0.33
#> 3    r3  C  M  C       0.67
#> 4    r4  K  K  K       1.00

2018年4月2日由reprex软件包(v2.0.1)创建

公良琛
2023-03-14

另一种可能的解决方案:

library(dplyr)

df %>% 
  rowwise %>% 
  mutate(score = max(prop.table(table(c_across(X1:X3))))) %>% 
  ungroup

#> # A tibble: 4 × 5
#>   group X1    X2    X3    score
#>   <chr> <chr> <chr> <chr> <dbl>
#> 1 r1    A     A     D     0.667
#> 2 r2    B     C     A     0.333
#> 3 r3    C     M     C     0.667
#> 4 r4    K     K     K     1

甚至更短:

library(tidyverse)
df %>% mutate(score = pmap_dbl(across(X1:X3), ~ max(prop.table(table(c(...))))))
 类似资料:
  • 问题内容: 假设您在数据库中按以下方式构造了一个表: 为了清楚起见,应输出: 请注意,由于向量存储在数据库中,因此我们仅需要存储非零条目。在此示例中,我们只有两个向量$ v_ {99} =(4,3,4,0)$和$ v_ {1234} =(0,5,2,3)$都在$ \ mathbb {R}中^ 4 $。 这些向量的余弦相似度应为$ \ displaystyle \ frac {23} {\ sqrt

  • 我有一个简短的问题 我有一个数据帧,有许多测量列。我想计算具有相同(标题)名称的列的平均值。我使用下面的代码(在stackoverflow中找到)。。 如何计算数据帧中具有相同列名的列的平均值 作为示例数据... 结果是这样的。。。 这段代码告诉我具有相同(标题)名称的列的含义。 但是我也想要均方差。我试着用rowSds替换rowMeans,但是不起作用。 知道如何使用相同的代码来计算均方差吗??

  • 本文向大家介绍C#计算2个字符串的相似度,包括了C#计算2个字符串的相似度的使用技巧和注意事项,需要的朋友参考一下 计算字符串相似度,直接来C#代码 返回结果就是相似度了,验证码识别上用的到 爱给模板网提供 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 这就是我的问题:我有一些代码从29个excel文件中提取一些数据,并将标记为“sw”的任何内容组织到一个变量中,将标记为“rep”的所有内容组织到另一个变量中: 然后我想找出这些文件的平均值和标准偏差,除非我使用了平均值(sw),它告诉我“参数不是数字或逻辑的:返回NA”。如果我打开“sw”或“rep”,我会得到如下结果: $

  • 我有两个列表,每个列表中有两个矩阵。。是否有一种方法可以对它们进行矩阵计算,即相加,其中matrix1中的蓝色矩阵与matrix2中的蓝色矩阵相加,matrix1中的红色矩阵与matrix2中的红色矩阵相加。我能想到的唯一方法是在循环中进行计算 请注意,我将有大约10个,以及不止一组(即蓝色、红色、绿色、紫色)

  • 问题内容: 如何找到向量之间的余弦相似度? 我需要找到相似性来衡量两行文本之间的相关性。 例如,我有两个句子: 用户界面系统 用户界面机 …及其在tF-idf之后的向量,然后使用LSI进行标准化,例如 和。 如何测量这些向量之间的相似性? 问题答案: 我最近在大学的信息检索部门做了一些tf-idf的工作。我使用了这种余弦相似度方法,该方法使用Jama:Java Matrix Package 。 有