Сортировка по верхним матричным корреляциям и удаление обратных дубликатов без применения

У меня есть матрица корреляции, и мне нужно извлечь верхние значения и удалить обратные дубликаты (коррелированные sw6 & sw4 = 0.6 означают то же самое, что sw4 & sw6 = 0.6).

Я использовал ответ, который использует изменение формы, чтобы вывести верхние корреляции выше 0,5. Теперь моя единственная проблема в том, что есть обратные дубликаты. Этот вопрос здесь делает в значительной степени то, что я хочу, чтобы удалить эти обратные дубликаты, но только с apply которое, я боюсь, может замедлить мой код для больших наборов. Есть ли способ удалить обратные дубликаты без него?

Или есть лучший способ получить верхние корреляции матрицы, производя только уникальные комбинации?

Выход после изменения формы расплава выглядит так:

X1 X2 value sw6 sw4 0.6299408 sw4 sw6 0.6299408 ss sl 0.5833333 sl ss 0.5833333 id ty 0.5724780 ty id 0.5724780 sl br 0.5333965 br sl 0.5333965

Но каждые две строки одинаковы.

Всего 1 ответ


Один из вариантов - заменить upper.tri или lower.tri на NA а затем melt . Это имело преимущество предварительной обработки без необходимости последующей обработки. Для больших наборов данных было бы лучше выполнить предварительную обработку, а не преобразовывать в длинный набор данных, а затем удалить дубликаты.

library(reshape2)
m1[lower.tri(m1, diag = TRUE)] <- NA
melt(m1, na.rm = TRUE)

ПРИМЕЧАНИЕ. Кроме того, не требуется никаких дополнительных пакетов, кроме того, который уже используется OP


Есть идеи?

10000