Entschuldigung für den schlechten Titel, aber ich wusste wirklich nicht, wie ich es kurz und bündig formulieren soll.Datenrahmen auf eine bestimmte Art anordnen
Ich habe ein Datenrahmen Ich spiele um mit denen ein Element in einem der 4 Kategorien sein kann, nicht beschränkt auf 1. Hier ist ein Beispiel für die Dummy-Matrix mit arbeite ich:
ID <- 1:7
A <- c(1,0,0,1,1,0,0)
B <- c(0,1,0,0,1,0,1)
C <- c(0,0,0,0,0,1,1)
D <- c(1,0,1,1,0,0,0)
A_B <- (A+B > 0)*1
C_D <- (C+D > 0)*1
Cost <- c(25, 52, 11, 75, 45, 5, 34)
df <- data.frame(ID, A, B, C, D, A_B, C_D, A_B_C_D = 1, Cost)
df
ID A B C D A_B C_D A_B_C_D Cost
1 1 0 0 1 1 1 1 25
2 0 1 0 0 1 0 1 52
3 0 0 0 1 0 1 1 11
4 1 0 0 1 1 1 1 75
5 1 1 0 0 1 0 1 45
6 0 0 1 0 0 1 1 5
7 0 1 1 0 1 1 1 34
Ich muss für diesen Datenrahmen so organisiert werden, dass Zeile 1 ein A, Zeile 2 a B, Zeile 3 a C, Zeile 4 a D, Zeile 5 ein A oder B, Zeile 6 a C oder D und Zeile 7 enthält ist übrig geblieben. Ich kann arrange
nicht, da würde mit desc(A)
beginnend verwenden, um automatisch 1, 4, 5. Eine akzeptable Lösung für dieses Problem wäre:
Order <- c(4, 2, 7, 1, 5, 3, 6)
df[Order,]
df
ID A B C D A_B C_D A_B_C_D Cost
4 1 0 0 1 1 1 1 75
2 0 1 0 0 1 0 1 52
7 0 1 1 0 1 1 1 34
1 1 0 0 1 1 1 1 25
5 1 1 0 0 1 0 1 45
3 0 0 0 1 0 1 1 11
6 0 0 1 0 0 1 1 5
Wesentlichen die diagonalen Bedürfnisse 7 Gerade sein, aber ich kann‘ Ich denke darüber nach, wie man es richtig programmiert, unabhängig vom Datensatz. Ich denke, das sollte wirklich einfach sein, aber ich sehe es einfach nicht. Würde das Transponieren es einfacher machen?
Vielen Dank im Voraus.
Was wird die Logik für mehr Anzahl der Zeilen sein? – akrun
@akrun gibt es immer nur 7 Zeilen, nur mehrere Iterationen: Sie sind das Ergebnis einer 'lpsolve'-Optimierung. Die Optimierung funktioniert so, dass ich immer die "richtige" Bestellung machen kann, ich muss nur die Bestellung rationalisieren. Die korrekte Reihenfolge ist erforderlich, damit die endgültige Ausgabe funktioniert. Danke – CoolGuyHasChillDay
Gibt es nur eine Lösung oder können es mehrere sein?Wenn Letzteres, interessierst du dich welches du bekommst? Möglicherweise müssen Sie einen Suchalgorithmus implementieren, der den Baum möglicher Anordnungen durchläuft, bis er einen gefunden hat, der funktioniert. –