基于条件验证R中两个数据帧之间列中的值

基于条件验证R中两个数据帧之间列中的值,r,R,我有两个数据帧。我必须匹配nndf和tndf之间的前两列,如果有匹配,我必须检查第三列中的值是否相同,并更新第三个数据帧。问题是nndf比tndf长 我尝试使用forloop+if条件。但是,它会在每一行中重复多次并填充结果 我们可以做一个内部连接,然后比较两列中的值 library(dplyr) inner_join(nndf, tndf, by = c("var1", "var2")) %>% mutate(var3 = var3.x == var3.y) %>%

我有两个数据帧。我必须匹配nndf和tndf之间的前两列,如果有匹配,我必须检查第三列中的值是否相同,并更新第三个数据帧。问题是nndf比tndf长

我尝试使用forloop+if条件。但是,它会在每一行中重复多次并填充结果

我们可以做一个内部连接,然后比较两列中的值

library(dplyr)

inner_join(nndf, tndf, by = c("var1", "var2")) %>%
   mutate(var3 = var3.x == var3.y) %>%
   dplyr::select(var1, var2, var3)


#  var1 var2  var3
#1  ABC  xyz  TRUE
#2  ABC  abc  TRUE
#3  DEF  def FALSE
或者类似地在R基中

df1 <- merge(nndf, tndf, by = c("var1", "var2"))
df1$var3 <- df1$var3.x == df1$var3.y
我们可以做一个内部连接,然后比较两列中的值

library(dplyr)

inner_join(nndf, tndf, by = c("var1", "var2")) %>%
   mutate(var3 = var3.x == var3.y) %>%
   dplyr::select(var1, var2, var3)


#  var1 var2  var3
#1  ABC  xyz  TRUE
#2  ABC  abc  TRUE
#3  DEF  def FALSE
或者类似地在R基中

df1 <- merge(nndf, tndf, by = c("var1", "var2"))
df1$var3 <- df1$var3.x == df1$var3.y
我们可以在基R中使用%in%来创建逻辑向量

tndf$var3 <- do.call(paste, tndf) %in% do.call(paste, nndf)
tndf
#  var1 var2  var3
#1  ABC  xyz  TRUE
#2  ABC  abc  TRUE
#3  DEF  def FALSE
我们可以在基R中使用%in%来创建逻辑向量

tndf$var3 <- do.call(paste, tndf) %in% do.call(paste, nndf)
tndf
#  var1 var2  var3
#1  ABC  xyz  TRUE
#2  ABC  abc  TRUE
#3  DEF  def FALSE

尝试tndf$var3尝试tndf$var3@akrun…谢谢…我使用了第一个选项,因为我有很多向量超出了第三列…已经为您的方法创建了一个改编。@akrun…谢谢…我使用了第一个选项,因为我有很多向量超出了第三列…已经为您的方法创建了一个改编。