简体   繁体   中英

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

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

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

在此处输入图片说明

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.

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)]

I am not sure if you mean this but you might use:

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

This will create a new table called newtable, with 3 columns and those values matched by the id, in this case "pid".

I'm way late here, but in case anybody else asks the same question:
This is exactly what dplyr's inner_merge does.

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

The by-command specifies which column should be used to match the rows.

EDIT: I used to have so much difficulty remembering it's a [join], and not a [merge].

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM