代码之家  ›  专栏  ›  技术社区  ›  Tdebeus

结合case\u when和mutate的条件语句

  •  2
  • Tdebeus  · 技术社区  · 8 年前

    我想创建一个绘制两个变量的双变量地图: production 和 possession . 为了给部分数据提供正确的颜色,我想添加一列颜色代码 "A", "B", "C" 对于一个变量和另一个变量 1, 2, 3 . 然后将两者结合起来。只需按照以下示例对数据进行编码即可:

    enter image description here

    下面是我的示例df和失败代码:

    library(dplyr)
    
    example_df <- structure(list(production = c(0.74, 1.34, 2.5), possession = c(5, 
    23.8, 124.89)), .Names = c("production", "possession"), row.names = c(NA, 
    -3L), class = c("tbl_df", "tbl", "data.frame"))
    
    example_df %>%
      mutate(colour_class_nr = case_when(.$production %in% 0.068:0.608 ~ "1",
                                         .$production %in% 0.609:1.502 ~ "2",
                                         .$production %in% 1.503:3.061 ~ "3",
                                         TRUE ~ "none"),
             colour_class_letter = case_when(.$possession %in% 0.276:9.6 ~ "A",
                                             .$possession %in% 9.7:52 ~ "B",
                                             .$possession %in% 52.1:155.3 ~ "C",
                                             TRUE ~ "none"))
    

    根据这些结果…:

    # A tibble: 3 x 4
      production possession colour_class_nr colour_class_letter
           <dbl>      <dbl> <chr>           <chr>              
    1      0.740       5.00 4               none               
    2      1.34       23.8  4               none               
    3      2.50      125    4               none  
    

    但这是期望的输出:

    # A tibble: 3 x 4
      production possession colour_class_nr colour_class_letter
           <dbl>      <dbl>           <dbl> <chr>              
    1      0.740       5.00 2                A               
    2      1.34       23.8  2                B               
    3      2.50      125    3                C 
    

    我是新来的 case_when() 结合mutate,希望有人能帮忙。

    1 回复  |  直到 8 年前
        1
  •  4
  •   RobertMyles    8 年前

    可能是这样:

    example_df %>%
      mutate(colour_class_nr = case_when(production < 0.608 ~ "1",
                                         production > 0.609 & production < 1.502 ~ "2",
                                         production > 1.503 ~ "3",
                                         TRUE ~ "none"),
             colour_class_letter = case_when(possession < 9.6 ~ "A",
                                             possession > 9.6 & possession < 52 ~ "B",
                                             possession > 52 ~ "C",
                                             TRUE ~ "none"))
    

    结果:

    # A tibble: 3 x 4
      production possession colour_class_nr colour_class_letter
           <dbl>      <dbl> <chr>           <chr>              
    1      0.740       5.00 2               A                  
    2      1.34       23.8  2               B                  
    3      2.50      125    3               C
    

    唯一的区别是 > 和 < ,尽管有些条件在您的示例中没有太多意义。你也不需要 .$ 在dplyr的最新版本中。