Сортировка по верхним матричным корреляциям и удаление обратных дубликатов без применения - PullRequest
1 голос
/ 17 мая 2019

У меня есть матрица корреляции, и мне нужно извлечь верхние значения и удалить обратные дубликаты (коррелированные 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 Ответ

1 голос
/ 17 мая 2019

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

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

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

...