case_when 和 is.na 的意外行为

问题描述 投票:0回答:1

我想将列中的所有 NA 值更改为 0,将所有其他值更改为 1。但是,我无法使

case_when
is.na
的组合发挥作用。

# 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 = FALSE)

# 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。

当我将

if_else
语句与
is.na
一起使用时,它确实有效,例如:

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

这是怎么回事?

r dplyr
1个回答
2
投票

你应该这样做:

df %>% 
    mutate(
        c = case_when(
            is.na(a) ~ 0,
            TRUE ~ 1
        )
    )
© www.soinside.com 2019 - 2024. All rights reserved.