基于条件将字符变量转换为哑变量时出现报错的问题求助
问题解决方法
1. 修正数据框创建错误
你创建df时误用了逻辑运算符&连接字符值,这会把"C" & "D"转换成逻辑值TRUE,导致x的长度为3而非预期的4。正确的创建方式应该用逗号分隔元素,同时建议关闭自动转因子的默认行为:
df <- data.frame(x = c("A", "B", "C", "D"), stringsAsFactors = FALSE)
2. 正确编写case_when逻辑
你的case_when条件写法存在语法错误:%in%的作用是检查元素是否在指定向量中,不需要和整个数据框比较;且第二个条件误将赋值设为1(应为0)。修正后的代码如下:
library(dplyr) df <- df %>% mutate(y = case_when( x %in% c("A", "D") ~ 1, x %in% c("B", "C") ~ 0, TRUE ~ NA_real_ # 显式指定未匹配情况返回NA,可选,不写的话未匹配也会自动返回NA ))
3. 验证输出结果
运行后得到的结果完全符合你的需求:
x y 1 A 1 2 B 0 3 C 0 4 D 1
替代方案(基础R实现)
如果不想使用dplyr,可以用基础R的嵌套ifelse完成:
df$y <- ifelse(df$x %in% c("A", "D"), 1, ifelse(df$x %in% c("B", "C"), 0, NA))
内容的提问来源于stack exchange,提问作者Eli
相关产品推荐
相关产品推荐

