web-dev-qa-db-de.com

R - Fügen Sie einem Datenrahmen eine neue Spalte hinzu, indem Sie die Werte eines anderen Datenrahmens verwenden

Ich versuche, table1 mit übereinstimmenden val2-Werten von table2 auszufüllen

table1$New_val2 = table2[table2$pid==table1$pid,]$val2

 enter image description here

Aber ich bekomme die Warnung 

longer object length is not a multiple of shorter object length

das ist fair genug, weil die Tischlängen nicht gleich sind.

Bitte weisen Sie mich bitte auf den richtigen Weg.

14
andy

merge(table1, table2[, c("pid", "col2")], by="pid")

Fügen Sie das Argument all.x=TRUE Hinzu, um alle Pids in Tabelle1 beizubehalten, die keine Übereinstimmungen in Tabelle2 haben.

Sie waren auf dem richtigen Weg. Hier ist eine Möglichkeit, Match zu verwenden ...

table1$val2 <- table2$val2[match(table1$pid, table2$pid)]

25
cory

Ich bin nicht sicher, ob Sie das meinen, aber Sie könnten Folgendes verwenden:

newtable <- merge(table1,table2, by  = "pid") 

Dadurch wird eine neue Tabelle mit dem Namen newtable erstellt, mit 3 Spalten und den Werten, die der id entsprechen, in diesem Fall "pid". 

3
adrian1121

Ich bin hier zu spät dran, aber falls noch jemand dieselbe Frage stellt:
Genau das tut dplyrs inner_merge.

table1.df <- dplyr::inner_merge(table1, table2, by=pid)

Der by-Befehl gibt an, welche Spalte verwendet werden soll, um die Zeilen abzugleichen.

0