r - 如何根据条件语句和 dplyr 创建新列?

标签 r dplyr

x y
2 4
5 8
1 4
9 12

我有四个条件

  • maxx = 3, minx = 1, maxy = 6, miny = 3。(如果 minx < x < maxx 且 miny < y < maxy,则 z = apple)
  • maxx = 6,minx = 4,maxy = 9,miny = 7。(如果 minx < x < maxx 且 miny < y < maxy,则 z = ball)
  • maxx = 2,minx = 0,maxy = 5,miny = 3。(如果 minx < x < maxx 且 miny < y < maxy,则 z = pine)
  • maxx = 12,minx = 7,maxy = 15,miny = 11。(如果 minx < x < maxx 且 miny < y < maxy,则 z = orange)

预期结果:

x y z
2 4 apple
5 8 ball
1 4 pine 
9 12 orange

我有数千行,这四个条件将适合所有值。

我如何使用 mutate 函数执行此操作?我知道如何直接操作数字,但不确定如何根据条件语句存储字符。

最佳答案

我认为这里最好的选择是使用 dplyr::case_when

df %>% mutate(z = case_when(
    x < 3  & x > 1 & y < 6  & y > 3  ~ "apple" ,
    x < 6  & x > 4 & y < 9  & y > 7  ~ "ball"  ,
    x < 2  & x > 0 & y < 5  & y > 3  ~ "pine"  ,
    x < 12 & x > 7 & y < 15 & y > 11 ~ "orange"
  )
)

这给了我们:

# A tibble: 4 x 3
      x     y z     
  <dbl> <dbl> <chr> 
1     2     4 apple 
2     5     8 ball  
3     1     4 pine  
4     9    12 orange

关于r - 如何根据条件语句和 dplyr 创建新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36003699/

相关文章:

r - 取消列出所选列并将其合并到 R 中的数据框

algorithm - 涉及 3 个硬币的 EM 问题

r - 使用 purrr::map 进行递归函数调用

r - 总结并列出dplyr中的自定义索引

R:使用 recode、mutate 和 case_when 重新编码变量

r - 如何查询数据框并根据 R 中的另一列更改数据?

r - 如何将经纬度转换为 NASA 的缓动网格?

r - 合并 R 中不相等的数据帧并删除不匹配的列

r - R 中析因实验的无约束设计矩阵

r - 合并两个数据帧: specifically merge a selection of columns based on two conditions?