我想将列中的所有 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))
)
这是怎么回事?
你应该这样做:
df %>%
mutate(
c = case_when(
is.na(a) ~ 0,
TRUE ~ 1
)
)