如何使用`case_when`根据字符串检测和R中的当前列值有条件地更改值?

ztyzrc3y  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(148)

我尝试根据未检测到字符串和列中的当前值来有条件地更改列中的值。

starwars %>%
  mutate(
    species = case_when(
      !str_detect(name, "Luke Skywalker") |
        !str_detect(name, "LUKE SKYWALKER") |
        !str_detect(name, "Darth Vader") |
        !str_detect(name, "DARTH VADER") &
        species == "Human"
      ~ "Other",
      .default = species
    )
  )

结果是所有物种的值都变成了“其他”。我本以为只有人类角色(不是卢克·天行者或达斯·维德)才是“物种的他者”。

omqzjyyz

omqzjyyz1#

由于mutate命令中只有两个条件,因此甚至不需要case_when()--只需使用if_else()即可。
这里有一个简单的方法来合并你的条件:

library(tidyverse)

starwars %>%
  mutate(species = if_else(!name %in% c("Luke Skywalker", "Darth Vader") &
                           species == "Human", "Other", species))
#> # A tibble: 87 × 14
#>    name     height  mass hair_color skin_color eye_color birth_year sex   gender
#>    <chr>     <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr> 
#>  1 Luke Sk…    172    77 blond      fair       blue            19   male  mascu…
#>  2 C-3PO       167    75 <NA>       gold       yellow         112   none  mascu…
#>  3 R2-D2        96    32 <NA>       white, bl… red             33   none  mascu…
#>  4 Darth V…    202   136 none       white      yellow          41.9 male  mascu…
#>  5 Leia Or…    150    49 brown      light      brown           19   fema… femin…
#>  6 Owen La…    178   120 brown, gr… light      blue            52   male  mascu…
#>  7 Beru Wh…    165    75 brown      light      blue            47   fema… femin…
#>  8 R5-D4        97    32 <NA>       white, red red             NA   none  mascu…
#>  9 Biggs D…    183    84 black      light      brown           24   male  mascu…
#> 10 Obi-Wan…    182    77 auburn, w… fair       blue-gray       57   male  mascu…
#> # ℹ 77 more rows
#> # ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
#> #   vehicles <list>, starships <list>

创建于2023-05-19带有reprex v2.0.2

相关问题