我有一个值为'true'false'的列chrBoolean,我想有一个新的列booleanNew,它在给定chrBoolean值的情况下采用布尔值TURE/false。所以基本上是这样的:
chrBoolean = c('true', 'true', 'false', 'false', 'true', NA)
booleanNew <- FALSE
booleanNew[chrBoolean == 'true'] <- TRUE
booleanNew[is.na(chrBoolean)] <- NA
desired values for booleanNew:
booleanNew = c(TRUE, TRUE, FALSE, FALSE, TRUE, NA)
我试着在case_when中使用mutate,但我对r不太熟悉,它对我来说还不起作用。我发现的所有例子总是类似于chrBoolean[chrBoolean == 'true'] <- TRUE
,但从不以另一列为条件更改一列。
chrBoolean = c('true', 'true', 'false', 'false', 'true', NA)
booleanNew <- as.logical(chrBoolean)
[1] TRUE TRUE FALSE FALSE TRUE NA
如果你想用dplyr::mutate
来做这件事,那就是
df %>%
mutate(booleanNew = as.logical(chrBoolean))
Zimia的答案更适合您的特定问题。但对于无法直接转换为逻辑的情况,这里有一个基于索引的更通用的解决方案。
> chrBoolean = c('true', 'true', 'false', 'false', 'true', NA)
> vals <- c(true = TRUE, false = FALSE)
> booleanNew <- vals[chrBoolean]
> booleanNew
true true false false true <NA>
TRUE TRUE FALSE FALSE TRUE NA
# To drop names
> as.vector(booleanNew)
[1] TRUE TRUE FALSE FALSE TRUE NA