Косинусное сходство строк во фрейме данных - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть набор данных, где каждый столбец имеет вероятность для различных параметров данного объекта. Первый столбец представляет собой строку, обозначающую имя объекта, в то время как все остальные столбцы имеют числовое значение c.

Я использую функцию cosine () из пакета 'coop', чтобы найти косинус сходство между объектами. В идеале я хочу, чтобы функция интерпретировала каждую строку как отдельный вектор и придавала мне индивидуальное косинусное сходство между каждым объектом. Как бы я ни старался, я не смог этого сделать, так как функция не принимает строковое значение (имя объекта) в качестве входных данных.

Для простоты, скажем, мои данные выглядят так (на самом деле это намного больше и сложнее):

ab c 0,75 0,23

xyz 0,80 0,40

jkl 0,32 0,91

Конечный результат, который мне нужен, будет матрица 3x3, которая сравнивает ab c, xyz и jkl с использованием числовых значений.

Я уверен, что мне здесь не хватает чего-то очень простого, но я был бы признателен за любую помощь. Есть ли способ, которым я могу сделать это?

1 Ответ

0 голосов
/ 06 апреля 2020

Вот простой способ создать желаемую матрицу 3x3.

library(coop)
df = data.frame(name=c('abc', 'xyz', 'jkl'), v1=c(0.75,0.8,0.32), v2 = c(0.23,0.4, 0.91))

# make a matrix transposed with each column corresponding to the name
mm = t(as.matrix(df[,2:3]))
cosine(mm)
#          [,1]      [,2]      [,3]
#[1,] 1.0000000 0.9862394 0.5937443
#[2,] 0.9862394 1.0000000 0.7186021
#[3,] 0.5937443 0.7186021 1.0000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...