2011-09-06 10 views
35

Jak mogę łączyć macierze z tych samych kolumn, ale z różną liczbą rzędów? Na przykład I chcę połączyć (dim(a) = 15 7000) i b (dim(b) = 16 7000) i chcę, aby wynik był macierzą 31 wierszy według kolumn 7000. Czy mogę to zrobić dla macierzy różnych wierszy i kolumn? Załóżmy, że chcę połączyć macierz złożoną z 15 rzędów i 7000 kolumn z innym z 16 rzędów i 7500 kolumn. Czy mogę z tym utworzyć zestaw danych?Matryce konkatenacji w R

Odpowiedz

44

Brzmi jak szukasz rbind:

> a<-matrix(nrow=10,ncol=5) 
> b<-matrix(nrow=20,ncol=5) 
> dim(rbind(a,b)) 
[1] 30 5 

Podobnie cbind stosy macierze poziomo.

nie jestem do końca pewien, co masz na myśli przez ostatnie pytanie („Czy mogę to zrobić dla matryc o różnych rzędach i kolumnach.?”)

+0

Załóżmy, że chcę połączyć macierz złożoną z 15 rzędów i 7000 kolumn oraz kolejną z 16 rwos i 7500 kolumn. Celem jest przejście przez każdy wiersz i znalezienie maksymalnej wartości. – Dombey

+3

@GTyler Twoje pytanie dotyczące łączenia 15x7000 i 16x7500 nie jest dobrze zdefiniowane. Musisz edytować swoje pytanie (nie zostawiaj komentarza), aby określić takie rzeczy jak: jaki jest wymiar? co dzieje się ze wszystkimi nadmiarowymi wierszami/kolumną? w jaki sposób każdy element wynikowej macierzy jest jednoznacznie określony? – joran

+0

@joran Nie zgadzam się i również myślę, że rbind lub cbind są złe funkcje dla tego problemu! Możliwość łączenia ramek danych lub macierzy o różnych numerach wierszy i/lub kolumn jest bardziej odpowiednia dla cbindX, o czym wspomnę poniżej! – gawbul

6

cbindX z pakietu gdata łączy wiele kolumn różne długości kolumn i rzędów. Sprawdź stronę tutaj:

http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/gdata/html/cbindX.html

To trwa kilka oddzielonych przecinkami matryce i data.frames jako wejście :) Wystarczy

install.packages("gdata", dependencies=TRUE)

a następnie

library(gdata) 
concat_data <- cbindX(df1, df2, df3) # or cbindX(matrix1, matrix2, matrix3, matrix4) 
+2

To zdecydowanie najszybsze rozwiązanie, jakiego próbowałem. – Datageek

+0

'cbindX' jest wielką funkcją, ale OP najwyraźniej tylko pyta o wiążące macierze według wiersza (zauważ wymiary wymiaru, które określają), a nie według kolumny, a ** gdata ** nie zawiera analogicznej funkcji rbind. Istnieje jednak funkcja 'rbind.fill' w ** plyr **. – joran

+0

Dodatkowo, mój komentarz, że ich pytanie nie było dobrze zdefiniowane, był poprawny. Wydaje się, że ignorujesz tę część: "Celem jest przejście przez każdy wiersz i znalezienie maksymalnej wartości." Nie jest jasne, co oznaczało to PO. Gdyby uzupełniali brakujące komórki tylko NA, wtedy po prostu zaleciłbym rbind.fill. – joran