使用case_when()将R数据框列中字符替换为数值的问题
解决R语言中替换字符列为0/1的问题
你原来的代码无效是因为is.character(State)判断的是整个列的类型(该列本身就是字符型,所以全部返回TRUE),而不是每个元素是否为空字符串。下面提供几种高效的解决方法:
- 方法一:使用dplyr的case_when明确判断空字符串
library(dplyr) myDf <- data.frame(Name = c("Al","Jon","Jack","Reed"), State = c("", "", "Ohio","Texas")) myDf %>% mutate(State = case_when(State == "" ~ 0, TRUE ~ 1))
- 方法二:用nzchar()简洁转换(推荐)
nzchar()函数会逐个检查字符串是否有非零长度,空字符串返回FALSE,非空返回TRUE,再通过as.integer()将布尔值转为0/1:
myDf %>% mutate(State = as.integer(nzchar(State)))
- 基础R实现(无需dplyr)
如果不用tidyverse工具,直接用基础R代码也能完成:
myDf$State <- as.integer(nzchar(myDf$State))
运行任意一种方法后,都会得到你期望的输出:
Name State 1 Al 0 2 Jon 0 3 Jack 1 4 Reed 1
内容的提问来源于stack exchange,提问作者LT17
相关产品推荐
相关产品推荐

