R语言 case_when 函数

本文介绍了R语言中case_when函数的使用要点。该函数在条件不匹配时返回NA,并按顺序进行条件判断。示例代码表明,如果不包含TRUE ~ as.character(x)条件,数字将被转换为字符而非返回NA,这表明case_when函数可与其他函数配合使用,不仅限于tidyverse库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

case_when

要点有两个

  1. 不匹配的时候会返回 NA,而不是保持不变
  2. 根据顺序进行条件判断,顺序很重要

下面这段代码,

x <- 1:50
case_when(
  x %% 35 == 0 ~ "fizz buzz",
  x %% 5 == 0 ~ "fizz",
  x %% 7 == 0 ~ "buzz",
  TRUE ~ as.character(x)
)

如果不包含TRUE ~ as.character(x),会返回

[1] NA          NA          NA          NA          "fizz"      NA         
 [7] "buzz"      NA          NA          "fizz"      NA          NA         
[13] NA          "buzz"      "fizz"      NA          NA          NA         
[19] NA          "fizz"      "buzz"      NA          NA          NA         
[25] "fizz"      NA          NA          "buzz"      NA          "fizz"     
[31] NA          NA          NA          NA          "fizz buzz" NA         
[37] NA          NA          NA          "fizz"      NA          "buzz"     
[43] NA          NA          "fizz"      NA          NA          NA         
[49] "buzz"      "fizz"

如果不包含TRUE ~ as.character(x),不满足前面几个条件的 数字 到了这里会被转成 character,因此不会返回 NA

x <- 1:50
case_when(
  x %% 35 == 0 ~ "fizz buzz",
  x %% 5 == 0 ~ "fizz",
  x %% 7 == 0 ~ "buzz",
  TRUE ~ as.character(x)
)
#>  [1] "1"         "2"         "3"         "4"         "fizz"      "6"        
#>  [7] "buzz"      "8"         "9"         "fizz"      "11"        "12"       
#> [13] "13"        "buzz"      "fizz"      "16"        "17"        "18"       
#> [19] "19"        "fizz"      "buzz"      "22"        "23"        "24"       
#> [25] "fizz"      "26"        "27"        "buzz"      "29"        "fizz"     
#> [31] "31"        "32"        "33"        "34"        "fizz buzz" "36"       
#> [37] "37"        "38"        "39"        "fizz"      "41"        "buzz"     
#> [43] "43"        "44"        "fizz"      "46"        "47"        "48"       
#> [49] "buzz"      "fizz"     

# Like an if statement, the arguments are evaluated in order, so you must
# proceed from the most specific to the most general. This won't work:
case_when(
  TRUE ~ as.character(x),
  x %%  5 == 0 ~ "fizz",
  x %%  7 == 0 ~ "buzz",
  x %% 35 == 0 ~ "fizz buzz"
)
#>  [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14" "15"
#> [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
#> [31] "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45"
#> [46] "46" "47" "48" "49" "50"

可以配合verb使用

starwars %>%
  select(name:mass, gender, species) %>%
  mutate(
    type = case_when(
      height > 200 | mass > 200 ~ "large",
      species == "Droid"        ~ "robot",
      TRUE                      ~ "other"
    )
  )

case_when可以用在和tidyverse库以外的函数一起使用

case_character_type <- function(height, mass, species) {
  case_when(
    height > 200 | mass > 200 ~ "large",
    species == "Droid"        ~ "robot",
    TRUE                      ~ "other"
  )
}

case_character_type(150, 250, "Droid")
#> [1] "large"
case_character_type(150, 150, "Droid")
#> [1] "robot"
在R语言中,case_when函数是一种强大且灵活的条件判断函数。它可以根据多个条件对数据进行逐行判断,并返回相应的结果。case_when函数的基本语法如下所示: case_when( condition1 ~ result1, condition2 ~ result2, ... ) 其中,condition1、condition2等是条件,用来判断数据是否满足某个条件;result1、result2等是结果,用来指定当条件满足时返回的结果。case_when函数按照条件的顺序逐个判断,当满足某个条件时,即返回对应的结果。如果所有条件都不满足,则返回NA。 举个例子,假设有一个变量x,它的取值范围是1到50。我们想要根据x的取值对其进行分类,如果x能被35整除,返回"fizz buzz";如果x能被5整除,返回"fizz";如果x能被7整除,返回"buzz";否则返回x的字符形式。可以使用如下代码实现: x <- 1:50 case_when( x %% 35 == 0 ~ "fizz buzz", x %% 5 == 0 ~ "fizz", x %% 7 == 0 ~ "buzz", TRUE ~ as.character(x) ) 在上述代码中,我们使用case_when函数对x进行分类,并根据条件进行判断,返回相应的结果。最后,我们得到了一个向量,其中包含了根据条件判断得到的结果。这样,我们就可以根据不同的条件对数据进行分类处理了。 总结起来,case_when函数是R语言中用于条件判断的函数,它的灵活性使得我们可以根据多个条件对数据进行逐行判断,并返回相应的结果。通过合理运用case_when函数,我们可以更加方便地处理和分析数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [R语言中的case_when函数和ifelse函数实战](https://blog.csdn.net/PixelCoder/article/details/132234595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [R语言 case_when 函数](https://blog.csdn.net/songbaiyao/article/details/107011695)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值