Существует ли способ суммирования общих расстояний между всеми метками, примененными к этому случаю, для каждого случая в наборе данных? - PullRequest
0 голосов
/ 19 декабря 2018

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

У меня есть набор данных с несколькими двоичными переменными, которыевыглядит так:

  caseid v1 v2 v3 v4
1    one  0  1  0  1
2    two  1  1  0  0
3  three  0  1  1  1
4   four  1  0  1  1

Кроме того, я уже построил матрицу расстояний, которая показывает расстояние между любыми заданными парами переменных.Это выглядит так:

   v1    v2   v3   v4
v1  0   0.5  0.3  0.2
v2 0.5   0   0.1  0.8
v3 0.3  0.1   0   0.4
v4 0.2  0.8  0.4   0 

Я хочу создать новую переменную, которая суммирует общее расстояние между всеми переменными, присутствующими в каждом случае.Например, для третьего случая я бы хотел получить значение (расстояние между v2 и v3) + (расстояние между v2 и v4) + (расстояние между v3 и v4) = 0,1 + 0,8 + 0,4 = 1,3.

Конечный результат будет выглядеть примерно так:

  caseid v1 v2 v3 v4 dist
1    one  0  1  0  1  0.8
2    two  1  1  0  0  0.5
3  three  0  1  1  1  1.3
4   four  1  0  1  1  0.9

Очевидно, что для этих нескольких случаев я могу выполнять вычисления вручную, но мой набор данных содержит около 800 случаев и 16 переменных, которые меня интересуют.Есть ли способ автоматизировать этот процесс?

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете использовать комбинацию apply и combn, чтобы определить для каждой строки вашего кадра данных попарные комбинации, которые вас интересуют, извлечь их из матрицы и суммировать их:

df$dist = apply(df[-1],1,function(x) sum(mat[t(combn(c(1:length(x))[as.logical(x)],2))]))
> df
  caseid v1 v2 v3 v4 dist
1    one  0  1  0  1  0.8
2    two  1  1  0  0  0.5
3  three  0  1  1  1  1.3
4   four  1  0  1  1  0.9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...