R- case_when和is.na的意外行为

  • 本文关键字:意外 na is case when r dplyr
  • 更新时间 :
  • 英文 :


我想将列中的所有NA值更改为0,并将所有其他值更改为1。但是,我无法获得case_时的组合。P>

# Create dataframe
a <- c(rep(NA,9), 2, rep(NA, 10))
b <- c(rep(NA,9), "test", rep(NA, 10))
df <- data.frame(a,b, stringsAsFactors = F)
# Create new column (c), where all NA values in (a) are transformed to 0 and other values are transformed to 1
df <- df %>% 
  mutate(
    c = case_when(
      a == is.na(.$a) ~ 0,
      FALSE ~ 1
    )
  )

我希望列(c(指示所有0个值和一个1值,但它的全部为0。

当我使用iS.na的if_else语句时,它确实可以工作,例如:

df <- df %>% 
  mutate(
    c = if_else(is.na(a), 0, 1))
  )

这里发生了什么?

您应该这样做:

df %>% 
    mutate(
        c = case_when(
            is.na(a) ~ 0,
            TRUE ~ 1
        )
    )

最新更新