Как создать матрицу симметрии c в R, считая, как часто два столбца имеют одинаковые значения? - PullRequest
1 голос
/ 17 апреля 2020

Предположим, у меня есть такой фрейм данных:

ID sp1 sp2 sp3
1  NA   1   1
2  0    0   1
3  1    NA  0
4  1    1   1

Вот что я хотел получить:

ID 1 2 3 4
1  2 1 0 2
2  1 1 0 1
3  0 0 1 1
4  2 1 1 3

, который показывает, сколько раз два столбца имеют одинаковое значение 1 здесь.

Поскольку исходный фрейм данных довольно большой, я надеюсь найти эффективный способ решения этой проблемы.

Большое спасибо за любые усилия.

1 Ответ

2 голосов
/ 17 апреля 2020

Чтобы создать матрицу совместного использования из ваших данных, вам сначала нужно преобразовать свои NA s в 0, а затем создать перекрестное произведение ваших данных без первого столбца ID:

x = data.frame(ID = c(1:4), sp1 = c(NA,0,1,1), sp2 = c(1,0,NA,1), sp3 = c(1,1,0,1))
x[is.na(x)] = 0
crossprod(t(x[-1]))

     [,1] [,2] [,3] [,4]
[1,]    2    1    0    2
[2,]    1    1    0    1
[3,]    0    0    1    1
[4,]    2    1    1    3
...