基于第二个数据集中的2个变量联接(或合并)数据集

时间:2018-10-19 20:03:43

标签: r join merge

我想基于第二个数据集的2个变量来合并/合并两个数据集。

用语言描述,我想基于变量1(if ((echoServAddr.sin_addr.s_addr != fromAddr.sin_addr.s_addr) || (echoServAddr.sin_port != fromAddr.sin_port)) )加入,如果这导致VAR1与变量2(NA)加入。

这是一个示例,我对此的解决方案:

VAR2

我想知道是否有更好的方法?

1 个答案:

答案 0 :(得分:2)

我们可以循环执行left_join,并通过在'VAR3'上应用reducevector变成单个coalesce

library(tidyverse)
map(paste0("VAR", 1:2), ~ 
  left_join(df_x, df_y, by = c("VAR0" = .x)) %>% 
       pull(VAR3)) %>% 
  reduce(coalesce)
#[1] "YES"   NA      "NO"    "MAYBE" "YES" 

或使用base R

pmin(df_y$VAR3[match(df_x$VAR0, df_y$VAR1)], 
             df_y$VAR3[match(df_x$VAR0, df_y$VAR2)], na.rm = TRUE)
#[1] "YES"   NA      "NO"    "MAYBE" "YES"

或者为避免使用df调用,请使用with

with(df_y, with(df_x, pmin(VAR3[match(VAR0, VAR1)], 
          VAR3[match(VAR0, VAR2)], na.rm = TRUE)))