tidyverse中的case_when()函數(shù)是一個非常強(qiáng)大的函數(shù)筒严,可以用來進(jìn)行多條件判斷和賦值操作。首先,case_when()函數(shù)需要至少兩個參數(shù):一個是要進(jìn)行判斷的向量,另一個是要進(jìn)行賦值的向量牢贸。例如:
library(tidyverse)
df <- tibble(x = 1:10)
df %>%
mutate(y = case_when(
x < 5 ~ "low",
x >= 5 & x < 8 ~ "medium",
x >= 8 ~ "high"
))
以上代碼根據(jù)x列的數(shù)字大小來給y列賦予不同的值,即:x < 5時镐捧,將y賦值為"low"潜索;x >= 5 & x < 8時臭增,將y賦值為"medium";x >= 8時帮辟,將y賦值為"high"速址。
這個代碼塊中,我們創(chuàng)建了一個數(shù)據(jù)框df由驹,其中包含一個名為x的向量芍锚,它的值從1到10。然后我們使用mutate()函數(shù)來創(chuàng)建一個新的向量y蔓榄,用來存儲根據(jù)x的值進(jìn)行賦值的結(jié)果并炮。
需要注意的是阅悍,case_when()函數(shù)中的條件是從上到下依次進(jìn)行判斷的钉赁,如果某個條件被滿足了,就不會再繼續(xù)進(jìn)行后面的條件判斷了卸耘。因此澜搅,我們需要將條件按照優(yōu)先級從高到低進(jìn)行排列伍俘。
除了基本的條件判斷外,case_when()函數(shù)還支持一些常用的函數(shù)勉躺,例如is.na()癌瘾、is.null()等。例如下面的代碼:
df %>%
mutate(z = case_when(
is.na(x) ~ "missing",
x < 5 ~ "low",
is.null(x) ~ "null",
x >= 5 & x < 8 ~ "medium",
x >= 8 ~ "high"
))
在這個代碼塊中饵溅,我們在判斷條件中使用了is.na()和is.null()函數(shù)來判斷x是否為缺失值或空值妨退。需要注意的是,在判斷缺失值時蜕企,我們需要將判斷缺失值的條件放在最前面咬荷,否則后面的條件判斷可能會出現(xiàn)錯誤。