R如何将数据框中二分类factor列批量转换为numeric类型?
报错原因
- 直接传入
numeric作为转换函数是错误的:numeric()是用于新建指定长度的空数值向量的函数,不是类型转换函数,因此触发长度参数异常的报错。 - 原有逻辑未增加二分类筛选规则,会尝试转换所有factor列,不符合仅转换二分类factor的需求。
实现代码
使用dplyr的across结合自定义筛选条件即可实现需求:
library(dplyr) df <- df %>% mutate(across( # 筛选规则:列类型为factor,且水平数等于2 .cols = where(function(x) is.factor(x) && nlevels(x) == 2), # 转换逻辑:先转字符再转数值,避免直接转numeric读取到factor内部的水平索引 .fns = function(x) as.numeric(as.character(x)) ))
如果你确认所有二分类factor的水平顺序就是0在前、1在后,也可以简化转换逻辑为.fns = ~as.numeric(.x) - 1,运行效率更高。
结果验证
转换完成后执行lapply(df, class)即可查看各列类型,A、B、C会变为numeric类型,D列保持factor类型不变。
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

