2012-03-27 14 views
1

Ich habe 2 separaten Datenrahmeneinen Datenrahmen zu einer Liste von Datenrahmen entsprechen und eine neue Variable in die Liste in R hinzufügen

df1

ID  Name  loq 
1  a  1.2 
1  b  1.4 
1  c  1.0 
2  a  0.5 
2  b  0.7 
2  c  0.3 
3  a  0.5 
3  b  0.2 
3  c  0.1   

df2 Dies ist eine Liste von Datenrahmen

[1] ID  Name 
    1  a 
    3  b 
    2  c 
    2  a 

[2] ID  Name 
     3  c 
     2  b 
     2  a 
     1  c 

Das Ergebnis für df2 wie diese

[1] ID  Name loq 
    1  a  1.2 
    3  b  0.2 
    2  c  0.3 
    2  a  0.5 

[2] ID  Name loq 
     3  c  0.1 
     2  b  0.7 
     2  a  0.5 
     1  c  1.0 
aussehen würde

Und ich habe eine lange Liste von Datenrahmen.

Ich möchte Match-ID UND Namen von Df1 zu Df2-Liste und eine neue Variable namens Loq zur Df2-Liste basierend auf der Übereinstimmung hinzufügen.

Ich weiß, wie die Match-Variable innerhalb eines Datenrahmens zu tun, aber nicht wissen, wie ein DF zu einer Liste von Datenframes passen.

Antwort

3

Keeping auf Basis ist es ziemlich geradlinig zu tun, was Sie wollen:

# Create the data frames/lists 
df1 <- data.frame(
    ID = gl(3,3), 
    Name = rep(letters[1:3], 3), 
    loq = c(1.2, 1.4, 1.0, 0.5, 0.7, 0.3, 0.5, 0.2, 0.1) 
) 
df2 <- list() 
df2[[1]] <- data.frame(ID = factor(c(1, 3, 2, 2)), Name = c('a', 'b', 'c', 'a')) 
df2[[2]] <- data.frame(ID = factor(c(3, 2, 2, 1)), Name = c('c', 'b', 'a', 'c')) 

lapply(df2, merge, y = df1) # merge df2 list elements accordingly to df1 

Sie können auch manuell festlegen, was zu fusionieren. In diesem Fall sucht es nach übereinstimmenden Spaltennamen: c (ID, Name). Wenn Sie DF2 in einen Datenrahmen setzen wollten, könnten Sie so etwas wie

do.call("rbind.data.frame", df2) # uses df2 list elements as arguments to rbind 

Der Schlüssel hier tun, ist, dass die Spalten-ID und Name des eindeutig den Datensatz definieren (in der Datenbank Begriffe, müssen sie ein Verbundprimärschlüssel sein für diese Datentabelle (Frame)). Auf diese Weise wird das Zusammenführen (Verbinden) der df2-Listenelemente (Datenrahmen) durch ihre Übereinstimmungen in df1 nicht zu einer Duplizierung und daher zu Problemen führen. Das heißt, es wird funktionieren, solange es nicht 2 verschiedene Zeilen mit den gleichen ID- und Name-Werten gibt.

+0

Das ist so hilfreich, genau das, was ich brauchte. Danke vielmals. – John

Verwandte Themen