如何基于my_diamonds将cut和color转为哑变量并生成新数据框?
解决dummyVars生成cut和color哑变量的错误问题
你遇到的问题是公式格式不正确导致的,dummyVars需要标准的R公式语法,不能把变量名用引号包裹起来。下面是修正后的完整解决方案:
正确的代码实现
# 确保cut和color是字符型(你已经完成这一步了) my_diamonds <- diamonds %>% mutate(cut = as.character(cut), color = as.character(color), clarity = as.character(clarity)) # 生成cut和color的哑变量:使用正确的公式语法 dummy <- caret::dummyVars(~ cut + color, data = my_diamonds, fullRank = FALSE, sep = ".") # 转换为数据框 training_data <- predict(dummy, my_diamonds) %>% as.data.frame()
错误原因解释
- 第一种写法
"cut + color":你把整个表达式当成了字符串,dummyVars会尝试直接解析这个字符串,导致它找不到名为color的对象(因为它被包裹在字符串内部,不是环境中的可识别变量)。 - 第二种写法
~ "cut + color":公式的右侧必须是变量名的组合,而不是一个完整的字符串,这种写法会被识别为无效的公式格式,所以报错invalid model formula in ExtractVars。
额外说明
如果你之后需要生成除特定变量外的所有哑变量,可以用这样的公式:~ . - clarity(表示除clarity之外的所有变量),但针对当前需求,~ cut + color就完全足够了。
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

