У меня есть матрица из 3 столбцов, которая содержит идентификаторы и оценки между ними.
> df1
ID_1 ID_2 Score
1: 1000020760 1000534822 1.70e-01
2: 1000020760 1000535109 1.10e+00
3: 1000020760 1000532510 3.20e+00
4: 1000020760 1000535228 3.70e+00
5: 1000035849 1000532512 2.49e-60
---
600: 1000773219 1000483302 2.40e+00
601: 1000773219 1000734829 8.50e+00
602: 1000773219 1000535109 1.00e+01
603: 1000773304 1000730133 5.80e+00
604: 1000773304 1000752994 9.20e+00
Каждое значение из первого столбца имеет несколько соответствующих значений из второго (включая отсутствие значений). Значение из третьего столбца не коммутирует по первым двум. Например:
> df1[4,]
ID_1 ID_2 Score
1: 1000020760 1000535228 3.7
> df1[294,]
ID_1 ID_2 Score
1: 1000535228 1000020760 3.9
Идентичные идентификаторы, но стоящие в разных местах, имеют разные оценки.
Я хотел бы создать матрицу m * m (m - это максимальное количество уникальных номеров). Идентификаторы в df1$ID_1
и df1$ID_2
), элементы которых являются соответствующими значениями из третьего столбца входной таблицы. Строки и столбцы выходной матрицы должны состоять из идентификаторов, а на пересечении - соответствующих значений из столбца Score
входной матрицы. Значения на главной диагонали должны быть равны 0, а недостающие значения должны быть равны NA
.
Например, если у меня есть такой ввод
> tmp1
ID_1 ID_2 Score
1: 1000020760 1000534822 0.17
2: 1000020760 1000535109 1.10
3: 1000020760 1000532510 3.20
4: 1000020760 1000535228 3.70
5: 1000535228 1000483302 2.50
6: 1000535228 1000020760 3.90
7: 1000535228 1000414853 5.10
8: 1000534822 1000020760 0.06
Мне бы хотелось чтобы увидеть такой вывод
> tmp_mat
1000534822 1000535109 1000532510 1000535228 1000483302 1000020760 1000414853
1000534822 0.00 NA NA NA NA 0.06 NA
1000535109 NA 0.0 NA NA NA NA NA
1000532510 NA NA 0.0 NA NA NA NA
1000535228 NA NA NA 0.0 2.5 3.90 5.1
1000483302 NA NA NA NA 0.0 NA NA
1000020760 0.17 1.1 3.2 3.7 NA 0.00 NA
1000414853 NA NA NA NA NA NA 0.0