You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件将字符变量转换为哑变量时出现报错的问题求助

问题解决方法

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:01:37