【发布时间】:2019-05-08 16:55:20
【问题描述】:
我想将列中的所有 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 = 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))
)
这是怎么回事?
【问题讨论】:
-
由于您使用的是
mutate,因此您可以(并且应该)在没有.$a的情况下指向a列。a == is.na(a)部分实际上没有意义,因为is.na返回一个逻辑值,而a是数字