У меня есть фрейм данных с именем df1, например:
![enter image description here](https://i.stack.imgur.com/1c0r4.png)
Я хочу изменить порядок столбцов df1, чтобы они группировались путем сопоставленияшаблон столбца.Это означает, что любой столбец, который имеет все 1 во всех строках группы слева.Затем должен следовать любой столбец, который имеет значение 1 для строки A и строки B, но 0 для строки C, ... и так далее, как в df2 ниже.
![enter image description here](https://i.stack.imgur.com/RdBEM.png)
Если есть связи (а в моем наборе данных их много), это не имеет значения, если они группируются / группируются в соответствии с ихшаблон столбца.Например, в df2, если столбец ex2 и ex5 переключен по порядку или [править после комментариев ниже] столбец ex3 и ex6 переключен по порядку, это также приемлемое для меня решение ...
Я пыталсяранжирование по сумме столбцов сначала, но это, очевидно, не работает, поскольку связи, где сумма равна 2, приводят к столбцам, которые не должны быть смежными с «кластеризацией».Например, я получу ex3, ex6, ex3, ex3, ex6 в «кластере», когда я хочу, чтобы все, что было похоже на ex3 вместе, и все, что было похоже на ex6 вместе.Это должно быть ex3, ex3, ex3, ex6, ex6.
Я подумал, что нужно перебрать каждый столбец и сопоставить шаблон с желаемыми шаблонами 1 и 0, но я действительно потерян в том, как формировать паттернсовпадать со всем столбцом, а не только со значением в столбце.
Код указан ниже:
ex1 <- c(1,0,0)
ex2 <- c(1,1,1)
ex3 <- c(1,0,1)
ex4 <- c(0,1,0)
ex5 <- c(1,1,1)
ex6 <- c(0,1,1)
ex7 <- c(0,0,1)
ex8 <- c(1,1,0)
df1 <- data.frame(ex1,ex2,ex3, ex4, ex5, ex6, ex7, ex8)
rownames(df1) <- c("a", "b", "c")
df2 <- data.frame(ex2, ex5, ex8, ex6, ex3, ex1, ex4, ex7)
rownames(df2) <- c("a", "b", "c")