跨两个数据框应用case_when

安东尼·W

我有两个数据框:

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))

我想通过在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"

这些规则将应用于每个相应的列,因此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 
tmfmnk

利用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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章