df1 <- data.frame( ID=1:3, Name=c("A","B","C"), Date=c(2011,2012,2013), Price=c(100,200,300) ) df2 <- data.frame( ID=c(1,1,3), Date=c(2012,2013,2014), Price=c(100,200,300) )
left_join will not get the desired result. You can use full_join .
merged <- full_join(df1, df2, by=c("Date","ID"))
Here you can access the exit with melt from the reshape2 package:
library(reshape2) merged <- melt(merged, id.vars=c("ID","Name","Date"))
Then:
> merged[na.omit(merged$Name), -4] #remove NAs and column from melt ID Name Date value 1 1 A 2011 100 2 2 B 2012 200 3 3 C 2013 300 1.1 1 A 2011 100 2.1 2 B 2012 200 3.1 3 C 2013 300
source share