Wie kann ich merge mehrere dataframes mit den gleichen Spaltennamen?

, Was ich haben:

Ich habe ein "master" dataframe, der die folgenden Spalten:

userid, condition

Da gibt es vier experiment-Bedingungen, ich habe auch vier dataframes, die Antwort von Informationen, mit den folgenden Spalten:

userid, condition, answer1, answer2

Nun, ich würde gerne mitmachen diese, damit alle Kombinationen von Benutzer-IDs, die Bedingungen und Ihre Antworten zu diesen Bedingungen zusammengeführt werden. Jeder Zustand sollte nur die richtige Antwort in die entsprechende Spalte, pro Zeile.


Kurze, in sich geschlossenes Beispiel:

master = data.frame(userid=c("foo","foo","foo","foo","bar","bar","bar","bar"), condition=c("A","B","C","D","A","B","C","D"))
cond_a = data.frame(userid=c("foo","bar"), condition="A", answer1=c("1","1"), answer2=c("2","2"))
cond_b = data.frame(userid=c("foo","bar"), condition="B", answer1=c("3","3"), answer2=c("4","4"))
cond_c = data.frame(userid=c("foo","bar"), condition="C", answer1=c("5","5"), answer2=c("6","6"))
cond_d = data.frame(userid=c("foo","bar"), condition="D", answer1=c("7","7"), answer2=c("8","8"))

Wie führe ich alle Bedingungen, die in den master, so dass die master-Tabelle sieht wie folgt aus?

  userid condition answer1 answer2
1    bar         A       1       2
2    bar         B       3       4
3    bar         C       5       6
4    bar         D       7       8
5    foo         A       1       2
6    foo         B       3       4
7    foo         C       5       6
8    foo         D       7       8

Ich habe versucht, die folgenden:

temp = merge(master, cond_a, all.x=TRUE)

Gibt mir:

  userid condition answer1 answer2
1    bar         A       1       2
2    bar         B    <NA>    <NA>
3    bar         C    <NA>    <NA>
4    bar         D    <NA>    <NA>
5    foo         A       1       2
6    foo         B    <NA>    <NA>
7    foo         C    <NA>    <NA>
8    foo         D    <NA>    <NA>

Aber sobald ich dies tun...

merge(temp, cond_b, all.x=TRUE)

Gibt es keine Werte für die Bedingung B. Wie kommt das?

  userid condition answer1 answer2
1    bar         A       1       2
2    bar         B    <NA>    <NA>
3    bar         C    <NA>    <NA>
4    bar         D    <NA>    <NA>
5    foo         A       1       2
6    foo         B    <NA>    <NA>
7    foo         C    <NA>    <NA>
8    foo         D    <NA>    <NA>
  • Ich habe gerade bemerkt, dass ich tun konnte merge(temp, cond_b, all=TRUE), aber das würde mir zusätzliche Zeilen mit NAs in es. Nicht ideal.
  • Würde dies helfen? temp <-rbind(cond_a,cond_b,cond_c,cond_d) temp[order(temp["userid"]),] Oder gibt es etwas bestimmtes, wie eine Beziehung mit Inhalt im master?
  • Im einfachen Fall von diesem post, ja, in der Tat! Ich habe ein paar extra-Spalten in der master -, die ist, warum es nicht funktioniert in meinem konkreten dataset – aber ich habe nicht erwähnt, dass, so fühlen sich frei zu posten, dass als ein Beispiel, wie gut.
InformationsquelleAutor slhck | 2012-12-08
Schreibe einen Kommentar