如何在R中基于另一列的值生成新的布尔类型列?
解决方案
以下是几种用dplyr生成新布尔列的方法,都能保留原列的NA值:
方法1:使用mutate + case_when
这是你尝试的方式,只需按条件匹配并指定对应布尔值,最后用TRUE ~ NA覆盖NA的情况:
library(dplyr) # 假设你的数据框名为df df <- df %>% mutate(booleanNew = case_when( chrBoolean == 'true' ~ TRUE, chrBoolean == 'false' ~ FALSE, TRUE ~ NA # 匹配所有未命中的情况(即NA) ))
方法2:嵌套ifelse
逻辑更直观,逐层判断值并返回对应结果:
df <- df %>% mutate(booleanNew = ifelse(chrBoolean == 'true', TRUE, ifelse(chrBoolean == 'false', FALSE, NA)))
方法3:转换大写后用as.logical
利用R内置的类型转换函数,先把小写的'true'/'false'转成大写,再直接转布尔型:
df <- df %>% mutate(booleanNew = as.logical(toupper(chrBoolean)))
验证示例
用你提供的测试向量验证:
chrBoolean = c('true', 'true', 'false', 'false', 'true', NA) library(tibble) tibble(chrBoolean) %>% mutate(booleanNew = case_when( chrBoolean == 'true' ~ TRUE, chrBoolean == 'false' ~ FALSE, TRUE ~ NA ))
输出的booleanNew列就是你需要的:c(TRUE, TRUE, FALSE, FALSE, TRUE, NA)
内容的提问来源于stack exchange,提问作者vossi
相关产品推荐
相关产品推荐

