R语言如何从data.frame数据框中移除所有二元变量
R语言移除数据框中所有二元变量的方法
首先给出示例测试数据:
# 构造示例数据框 df <- data.frame(A=c(1,2,3), B=c(1,0,1), C=c(0.1, 0.011, 0.3), D=c(0, 0.5, 1)) df
运行后数据结构如下:
A B C D 1 1 1 0.100 0.0 2 2 0 0.011 0.5 3 3 1 0.300 1.0
实现方法
方法1:base R 原生实现(无需安装第三方包)
核心判定逻辑:逐列统计非重复取值的数量,唯一值总数恰好为2的列判定为二元变量,做移除处理
# 筛选保留非二元变量的列 df_clean <- df[, sapply(df, function(x) length(unique(x)) != 2)] df_clean
运行结果:
A C D 1 1 0.100 0.0 2 2 0.011 0.5 3 3 0.300 1.0
可以看到示例中的二元变量B已经被成功移除。
注意:如果数据中存在缺失值
NA,可以将判断逻辑调整为length(unique(na.omit(x))) != 2,避免缺失值被算作独立取值干扰判断结果。
方法2:仅移除0/1型哑变量(适配特殊场景)
如果你不需要移除所有仅含2个取值的列(比如两水平的分类列"男/女"、"是/否"需要保留),只需要移除取值仅为0和1的二元哑变量,可以用如下判断逻辑:
df_clean <- df[, sapply(df, function(x) !all(unique(x) %in% c(0, 1)))]
在当前示例数据下运行结果和方法1一致。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

