Summe jeder Kombination berechnen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

LeaRn
Beiträge: 17
Registriert: Sa Mär 14, 2020 12:25 am

Summe jeder Kombination berechnen

Beitrag von LeaRn »

Hallo Zusammen
Ich habe folgenden Datensatz:

Code: Alles auswählen

daten <- data.frame(
  variable1 = c(rep(1,5), rep(2,5), rep(3,5), rep(4,5), rep(5,5)),
  variable2 = rep(1:5,5),
  kriterium = rnorm(25)
)
Man kann sich die Datenstruktur auch 2-Dimensional vorstellen (wobei variable1 auf der X-Achse, variable2 auf der Y-Achse und kriterium im Innern dargestellt sind):

Code: Alles auswählen

datenstruktur <- matrix(ncol = 5, nrow = 5)
for (i in 1:5) {
  datenstruktur[i,] <- rnorm(5)
}
Ich habe nur den Datensatz "daten" und NICHT den Datensatz "datenstruktur". Dieser dient nur zur Erklärung und zur Visualisierung des Problems.

Ich habe folgendes Problem: Ich soll die Summe jeder möglichen Kombintation aus 5 Werten berechnen, sodass
jede Zeile UND jede Spalte nur einmal vorkommen. 3 von (in diesem Fall mit der 5x5 Matrix) 120 möglichen Kombinationen habe ich in der Datei1 mit rot angezeichnet:
Datei1.JPG
Wie gesagt, ich suche die Summe pro Matrix der unterstrichenen Werte.

Ich hoffe, dass ich das Problem ausreichend beschrieben habe, wenn nicht, dürft Ihr euch gerne melden.

Ich wäre sehr froh um jeden Vorschlag (schriftlich oder in Code).

Liebe Grüsse
LeaRn
Zuletzt geändert von LeaRn am Fr Okt 08, 2021 9:24 am, insgesamt 1-mal geändert.
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Summe jeder Kombination berechnen

Beitrag von Athomas »

3 von (in diesem Fall mit der 5x5 Matrix) 20 möglichen Kombinationen habe ich in der Datei1 mit rot angezeichnet
Wieso 20?
LeaRn
Beiträge: 17
Registriert: Sa Mär 14, 2020 12:25 am

Re: Summe jeder Kombination berechnen

Beitrag von LeaRn »

Die Zahl stimmt nicht, sorry!
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Summe jeder Kombination berechnen

Beitrag von Athomas »

Ich habe die Frage nicht verstanden - was soll das Ergebnis sein?
Bei einer 5x5-Matrix 120 Werte?
LeaRn
Beiträge: 17
Registriert: Sa Mär 14, 2020 12:25 am

Re: Summe jeder Kombination berechnen

Beitrag von LeaRn »

Ja genau, 120 sind alle möglichen Kombinationen bei einer 5x5 Matrix.
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Summe jeder Kombination berechnen

Beitrag von Athomas »

Ich hatte eigentlich nicht gefragt, ob das die Anzahl der möglichen Kombinationen ist - sondern ob die 120 Zahlenwerte das gesuchte Ergebnis darstellen!?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Summe jeder Kombination berechnen

Beitrag von jogo »

Hallo LeaRn,

bei mir sieht das so aus (falls ich alles richtig verstanden habe):

Code: Alles auswählen

set.seed(42)
datenstruktur <- matrix(rnorm(25), ncol = 5, nrow = 5)

library("combinat")
mySum <- function(Cols) sum(datenstruktur[cbind(1:5, Cols)])
unlist(permn(5, mySum))
Da ist ein besonderer Kunstgriff drin: Indizierung der Elemente einer Matrix mit Hilfe einer zweispaltigen Matrix.

Gruß, Jörg
BTW:

Code: Alles auswählen

daten <- data.frame(variable1=rep(1:5, each=5), variable2=1:5, kriterium=datenstruktur)
bzw. -- falls daten gegeben ist:

Code: Alles auswählen

datenstruktur <- matrix(daten$kriterium, nrow=5)
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Summe jeder Kombination berechnen

Beitrag von Athomas »

Genau, so geht das - wenn lediglich nach den 120 Zahlen gefragt wird (woran ich irgendwie zweifle :) )...
LeaRn
Beiträge: 17
Registriert: Sa Mär 14, 2020 12:25 am

Re: Summe jeder Kombination berechnen

Beitrag von LeaRn »

Wow, auf 2 Zeilen. Vielen Dank, danach habe ich gesucht! Werde mir das Paket "combinat" mal genauer anschauen.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Summe jeder Kombination berechnen

Beitrag von jogo »

Hallo LeaRn,

wenn Dir zwei Zeilen noch zuviel sind, kann die Funktion auch als anonyme Funktion Eingang in den Code finden. Für die Kombinationen wird das Paket combinat nicht benötigt -- eine Funktion combn() gibt es auch im Paket utils, welches standardmäßig installiert und geladen ist. In Deinem Fall werden aber Permutationen benötigt.

Gruß, Jörg
Antworten