R - Add a new column to a dataframe using matching values of another dataframe

andy picture andy · May 4, 2016 · Viewed 68.2k times · Source

I am trying to fill in table1 with matching val2 values of table2

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

enter image description here

But I get the warning

longer object length is not a multiple of shorter object length

which is fair enough because the table lengths are not the same.

Please kindly direct me on the correct way to do this.

Answer

cory picture cory · May 4, 2016

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

Add in the all.x=TRUE argument in order to keep all of the pids in table1 that don't have matches in table2...

You were on the right track. Here's a way using match...

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