我有两个数据框:
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)
我想通过在df1和df2之间应用一些条件逻辑,通过比较等效命名的列之间的条目来生成第三个数据框。所以逻辑是:
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)
利用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)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |