如何在另一列的值条件下更改整列?

  • 本文关键字:条件下 一列 r
  • 更新时间 :
  • 英文 :


我有一个值为'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

最新更新