Matrizen in eine mehrdimensionale Matrix verbinden

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

Moderatoren: EDi, jogo

ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von ademi »

Hallo zusammen,

ich habe mehrere Matrizen, die alle wie folgt aussehen:
matrix1 [51,14], matrix2 (die gleiche Anzahl Zeilen und Spalten) etc.
Nun möchte ich z.B. diese 2 zweidimensionale Matrizen in eine dreidimensionale verbinden.
Wenn ich aber folgendes mache:

Code: Alles auswählen

Beispiel <- array(0, c(51,14,2)) 
Beispiel [,,1]  <- matrix1
Beispiel[,,2] <-matrix2 
kommt was falsches raus. Was wäre hier die richtige Vorgehensweise?

Liebe Grüße
ademi
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von jogo »

Bei mir klappt es tadellos:

Code: Alles auswählen

m1 <- matrix(1:12, 3)
m2 <- matrix(101:112, 3)
M <- array(NA, c(3,4,2))
M[,, 1] <- m1
M[,, 2] <- m2
M
oder auch

Code: Alles auswählen

array(c(m1,m2), c(3,4,2))
Gruß, Jörg
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von Athomas »

Wenn ich aber folgendes mache ... kommt was falsches raus.
Bitte beim nächsten Mal sagen, was rauskommt - und warum es als falsch empfunden wird...
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von ademi »

Athomas hat geschrieben: Mo Okt 28, 2019 2:31 pm
Wenn ich aber folgendes mache ... kommt was falsches raus.
Bitte beim nächsten Mal sagen, was rauskommt - und warum es als falsch empfunden wird...
Statt Zahlen sehe ich dann in der neuen Matrix folgendes:

Code: Alles auswählen

      [,1]       [,2]       [,3]       [,4]       [,5]       [,6]       [,7]      
 [1,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
 [2,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
 [3,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
 [4,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
 [5,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
 [6,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
 [7,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
 [8,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
 [9,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[10,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[11,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[12,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[13,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[14,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[15,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[16,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[17,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
[18,] Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51 Integer,51
LG
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von jogo »

Hallo ademi,

ich vermute, dass Deine Objekte matrix1 und matrix2 keine Matrizen sind.
Das klärt sich alles schnell auf, nachdem Du uns ein reproduzierbares Beispiel geliefert hast
im Sinne von viewtopic.php?f=20&t=11

Gruß, Jörg
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von ademi »

jogo hat geschrieben: Mo Okt 28, 2019 2:43 pm Hallo ademi,

ich vermute, dass Deine Objekte matrix1 und matrix2 keine Matrizen sind.
Das klärt sich alles schnell auf, nachdem Du uns ein reproduzierbares Beispiel geliefert hast
im Sinne von http://forum.r-statistik.de/viewtopic.php?f=20&t=11

Gruß, Jörg
Hier ist mein Beispiel, die beiden Dateien M1 und M2 sind data.frames

Code: Alles auswählen

> M1 <- read.csv("deliveries.csv", row.names=1)
> M2 <-read.csv("diesel share.csv", row.names=1)

> M1
         X2018 X2019 X2020 X2021 X2022
Mercedes    NA   897   365   438   967
Opel        NA   582   785   213   561
Fiat        NA    12    46    37    75
BMW         NA    83    98    43    37
Audi        NA   123   345   678   987

> M2
         X2018 X2019 X2020 X2021 X2022
Mercedes    NA   0.5   0.5   0.5   0.5
Opel        NA   0.5   0.5   0.5   0.5
Fiat        NA   0.5   0.5   0.5   0.5
BMW         NA   0.5   0.5   0.5   0.5
Audi        NA   0.5   0.5   0.5   0.5

> M <- array(c(M1, M2), c(5,5,2))

> M
, , 1

     [,1]      [,2]      [,3]      [,4]      [,5]     
[1,] Logical,5 Logical,5 Logical,5 Logical,5 Logical,5
[2,] Integer,5 Numeric,5 Integer,5 Numeric,5 Integer,5
[3,] Integer,5 Numeric,5 Integer,5 Numeric,5 Integer,5
[4,] Integer,5 Numeric,5 Integer,5 Numeric,5 Integer,5
[5,] Integer,5 Numeric,5 Integer,5 Numeric,5 Integer,5

, , 2

     [,1]      [,2]      [,3]      [,4]      [,5]     
[1,] Logical,5 Logical,5 Logical,5 Logical,5 Logical,5
[2,] Numeric,5 Integer,5 Numeric,5 Integer,5 Numeric,5
[3,] Numeric,5 Integer,5 Numeric,5 Integer,5 Numeric,5
[4,] Numeric,5 Integer,5 Numeric,5 Integer,5 Numeric,5
[5,] Numeric,5 Integer,5 Numeric,5 Integer,5 Numeric,5
LG
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von jogo »

read.csv() liefert einen dataframe. So steht es in der Dokumentation :!:

Code: Alles auswählen

array(c(BOD, BOD), c(6,2,2))  #### versus
array(c(as.matrix(BOD), as.matrix(BOD)), c(6,2,2))
Gruß, Jörg
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von ademi »

jogo hat geschrieben: Mo Okt 28, 2019 3:01 pm read.csv() liefert einen dataframe. So steht es in der Dokumentation :!:
Heißt es, die data.frame kann man nicht in eine mehrdimensionale Matrix bzw. mehrdimensionale data.frame umwandeln?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von jogo »

ademi hat geschrieben: Mo Okt 28, 2019 3:03 pm
jogo hat geschrieben: Mo Okt 28, 2019 3:01 pm read.csv() liefert einen dataframe. So steht es in der Dokumentation :!:
Heißt es, die data.frame kann man nicht in eine mehrdimensionale Matrix bzw. mehrdimensionale data.frame umwandeln?
Natürlich kannst Du einen Dataframe in eine Matrix umwandeln. Jedoch musst Du es explizit tun (siehe meine vorherige Nachricht mit dem reproduzierbaren Beispiel).
Ein Dataframe ist nicht automatisch eine Matrix; das sind zwei grundsätzlich verschiedene Datenstrukturen.
Ein Dataframe ist eine Liste von Vektoren.
Eine Matrix ist ein umgebrochener/gefalteter Vektor.

Gruß, Jörg
ademi
Beiträge: 22
Registriert: Mi Sep 25, 2019 3:15 pm

Re: Matrizen in eine mehrdimensionale Matrix verbinden

Beitrag von ademi »

jogo hat geschrieben: Mo Okt 28, 2019 3:07 pm
ademi hat geschrieben: Mo Okt 28, 2019 3:03 pm
jogo hat geschrieben: Mo Okt 28, 2019 3:01 pm read.csv() liefert einen dataframe. So steht es in der Dokumentation :!:
Heißt es, die data.frame kann man nicht in eine mehrdimensionale Matrix bzw. mehrdimensionale data.frame umwandeln?
Natürlich kannst Du einen Dataframe in eine Matrix umwandeln. Jedoch musst Du es explizit tun.
Ein Dataframe ist nicht automatisch eine Matrix; das sind zwei grundsätzlich verschiedene Datenstrukturen.
Ein Dataframe ist eine Liste von Vektoren.
Eine Matrix ist ein umgebrochener/gefalteter Vektor.

Gruß, Jörg
Hallo Jörg,

vielen Dank, jetzt habe ich es (endlich) kapiert! Habe zuerst den Code mit as.matrix oben übersehen...

Gruß
Antworten