2017-01-05 3 views
0

Ich versuche, eine Tabelle C zu erstellen, die Werte aus einer Matrix X, Y und Z basiert auf der "Adresse" in zwei anderen Tabellen A und B.Erhalten Wert von Matrix basierend auf Adresse aus zwei anderen Tabellen in R

um dies zu tun ich habe erste ID-Spalten in Tabellen A gegeben und B von:

A$A.ID <- seq.int(nrow(A)) 
B$B.ID <- seq.int(nrow(B)) 

und fand alle Permutationen der IDs:

C <- expand.grid(A$A.ID, B$B.ID) 

Jetzt möchte ich um Spalten X, Y und Z hinzuzufügen C habe aber keine Ahnung was ich mache (; ziemlich neu zu programmieren: /)

Um den Vorgang zu erläutern habe ich ein Bild gezeichnet. Hoffentlich hilft es ...

enter image description here

Lassen Sie mich wissen, wenn Sie etwas anderes wissen müssen.

+0

Ich weiß, es ist wahrscheinlich ein richtiger Schmerz, aber wenn Sie reproduzierbare Beispiele von A/B/X/Y/Z und eine C des beabsichtigten Ergebnisses (die Datensätze könnten nur 3 oder 4 Zeilen sein), würden Sie sein viel wahrscheinlicher, Code in einer Antwort zu erhalten. – thelatemail

Antwort

1

Ich denke, das funktioniert nach dem Muster, das Sie beschreiben. Zunächst einmal hier einige Beispieldaten:

A <- data.frame(A.ID=1:2, X=1:2, Y=3:2, Z=2:1) 
B <- data.frame(B.ID=1:2, X=1:2, Y=2:1, Z=1:2) 

A;B 
# A.ID X Y Z 
#1 1 1 3 2 
#2 2 2 2 1 

# B.ID X Y Z 
#1 1 1 2 1 
#2 2 2 1 2 

X <- matrix(1:9,nrow=3); Y <- matrix(1:16,nrow=4); Z <- matrix(1:4,nrow=2) 
X;Y;Z 
#  [,1] [,2] [,3] 
#[1,] 1 4 7 
#[2,] 2 5 8 
#[3,] 3 6 9 

#  [,1] [,2] [,3] [,4] 
#[1,] 1 5 9 13 
#[2,] 2 6 10 14 
#[3,] 3 7 11 15 
#[4,] 4 8 12 16 

#  [,1] [,2] 
#[1,] 1 3 
#[2,] 2 4 

dann zu einer Matrix ein Bündel von Map ping des erforderlichen Indizes, das jede der X/Y/Z Objekte der Teilmenge verwendet wird:

arep <- rep(1:nrow(A),nrow(B)) 
brep <- rep(1:nrow(B),each=nrow(A)) 
cells <- Map(
    `[`, 
    list(X=X,Y=Y,Z=Z), 
    Map(function(x,y) t(mapply(c,x,y)), A[arep,-1], B[brep,-1]) 
) 

data.frame(A["A.ID"][arep,,drop=FALSE], B["B.ID"][brep,,drop=FALSE], cells) 
# A.ID B.ID X Y Z 
#1  1 1 1 7 2 
#2  2 1 2 6 1 
#1.1 1 2 4 3 4 
#2.1 2 2 5 2 3 
+0

'Subscript out of Bounds' bezieht sich wahrscheinlich auf den Versuch, eine Zeilen-/Spaltenkombination auszuwählen, die größer ist als die' X/Y/Z'-Matrix, mit der sie auch übereinstimmt. Der "Mapply" -Fehler kann sein, weil "A" und "B" nicht die gleiche Anzahl von Zeilen haben. Es gibt viele mögliche Gründe, warum diese Fehler ausgelöst werden, aber das sind ein paar Ideen. – thelatemail

+0

Hey danke dafür, Sorry, Sie wieder zu belästigen, aber ich bemerkte auch, dass die data.frame-Funktion am Ende nicht die Permutationen von A.ID und B.ID, dann ihre entsprechenden Werte von X, Y und Z ? es sieht aus wie das Ergebnis in Ihrem Beispiel ist nur Schlange n mit n. Das Ergebnis i wie dieses ABXYZ aussehen gedacht, soll (1, 1, 1, 7, 2) (1, 2, 4, 3, 4) (2, 1, 2, 6, 1) (2, 2, 5, 2, 3) Ich habe versucht, dies innerhalb des data.frame-Befehls mit einem expand.grid zu erzeugen, aber das hat auch nicht funktioniert. sollte ich diese Liste generieren und dann die Ergebnisse dieser Zuordnung anfügen? –

+0

@LevonRush - bearbeitet, um Ihr Problem zu beheben – thelatemail

Verwandte Themen