Применение определенной формулы c к большому кадру матрицы / данных в R, чтобы нормализовать мои данные - PullRequest
0 голосов
/ 10 января 2020

У меня есть большая «матрица расстояний» (на самом деле кадр данных размером 170x170 в R), например:

         A            B          C
A   0.198395022 0.314012433 0.32704998
B   0.314012433 0.262514533 0.318539233
C   0.32704998  0.318539233 0.211224133

Я пытаюсь применить конкретную формулу c (которая у меня уже есть) чтобы внести это изменение в шкалу 0-1, как требуется для моего статистического моделирования. Я ожидаю получить что-то подобное во всем фрейме данных (ожидаемый результат при применении формулы):

          A              B              C
A        1          0.846050953    0.825897603
B   0.846050953          1         0.822548469
C   0.825897603     0.822548469         1

Итак, мне нужно пересчитать каждую недиагональную ячейку относительно соответствующих значений применяя эту формулу в R:

Формула здесь

где B - матрица нормализованных значений, H - это мой кадр матрицы / данных, а i и j - строки и столбцы моего кадра матрицы / данных соответственно. Предполагается, что эта процедура нормализации систематически заменяет диагональ ( i = j ) на 1.

Спасибо!

1 Ответ

0 голосов
/ 10 января 2020

Вы можете сделать al oop, чтобы заменить каждое значение в соответствии с вашей формулой:

df <- data.frame(rnorm(3, 20,15), rnorm(3, 10,5), rnorm(3, 200,100))
df # Check out the results

for (i in 1:length(df)){   
    for (j in 1:nrow(df)){
       df[i,j] <- df[i,j]/((df[i,i]+df[j,j])/2)   
    } 
} 

df ## Обратите внимание, что сделано!

...