跨两个数据帧应用 case_when

Ant*_*y W 1 r dataframe

我有两个数据框:

df1 <- data.frame(A = c(1, 2, 3), B = c(0,0,3), C = c(3,2,1)) 
df2 <- data.frame(A = c(0, 2, 4), B = c(1,0,3), C = c(0,1,4))
Run Code Online (Sandbox Code Playgroud)

我想通过在df1df2之间应用一些条件逻辑,通过比较等效命名的列之间的条目来生成第三个数据框。所以逻辑是:

df1$A == 0 and df2$A>0         ~ df3$A = "colonised"
df1$A < df2$A and df1$A != 0   ~ df3$A = "increased"
df1$A == df2$A and df1$A >0    ~ df3$A = "stable"
df1$A > df2$A  and df2$A != 0  ~ df3$A = "decreased"
df1$A>0 and df2$A == 0         ~ df3$A = "extinct"
Run Code Online (Sandbox Code Playgroud)

这些规则将应用于每个相应的列,因此 df1$B v df2$B 和 df1$C v df2$C。上面的示例将给出以下结果df3

  A         B         C
1 extinct   colonised extinct
2 stable    stable    decreased
3 increased stable    increased 
Run Code Online (Sandbox Code Playgroud)

tmf*_*mnk 5

利用dplyr和 的一种选择purrr可能是:

map2_dfr(.x = df1,
         .y = df2,
         ~ case_when(.x == 0 & .y > 0 ~ "colonised",
                     .x > 0 & .y == 0 ~ "extinct",
                     .x < .y ~ "increased",
                     .x == .y ~ "stable",
                     .x > .y ~ "decreased"))

  A         B         C        
  <chr>     <chr>     <chr>    
1 extinct   colonised extinct  
2 stable    stable    decreased
3 increased stable    increased
Run Code Online (Sandbox Code Playgroud)