left在R中通过id加入一个变量

时间:2017-03-01 02:12:07

标签: r merge left-join

我有两张桌子df1和df2。现在我想通过相同的id将df2的变量newVar连接到df1。但问题是df1中存在一些ID,但df2中不存在。

所以我想要if df1.id exists in df2, then df1.newVar=df2.newVar, else df1.newVar=0

在R中,我尝试了df1$newVar= ifelse((df1$id %in% df2$id), df2$newVar, 0)但结果并不好。

我也试过sqldf('select df1.*, df2.newVar as newVar from df1 left outer join df2 on df2.id= df1.id')但是R给出了错误。

以下是df1:

的示例
id   var1
A     1
A     2
B     1

DF2:

id   newVar
A     1
A     1

我希望df1的结果如下:

id   var1   newVar
A     1       1
A     2       1
B     1       0

1 个答案:

答案 0 :(得分:2)

您可以使用 left_join {dplyr} 来完成这项工作。

library("dplyr")
df1 <- data_frame(
  id = c("A", "A", "B"),
  var1 = c(1, 2, 1)
)

df2 <- data_frame(
  id = c("A", "A"),
  newvar = c(1, 1)
)

unique(left_join(df1,df2,by="id"))

结果是:

# A tibble: 3 × 3
     id  var1 newvar
  <chr> <dbl>  <dbl>
1     A     1      1
2     A     2      1
3     B     1     NA