如何识别数据框中值全同的列并替换为指定新列
解决R语言数据框全值相同列的替换问题
完整实现代码
先回顾你的原始数据和已有的识别逻辑:
# 原始数据框 df <- data.frame(c(1:5), c(6:10), rep(1,length(5)), c(11:15), rep(4,length(5))) # 识别值不全部相同的列(你已完成的代码) i1 <- sapply(df, function(x) length(unique(x)) > 1)
接下来执行替换操作,只需两步:
- 构造替换用的向量:第一行是1,其余行是0
replace_vec <- c(1, rep(0, nrow(df) - 1))
- 把所有值全相同的列(即
!i1对应的列)替换为上述向量
df[, !i1] <- replace_vec
验证结果
运行print(df)可以看到替换后的效果:
c.1.5. c.6.10. rep.1..length.5. c.11.15. rep.4..length.5. 1 1 6 1 11 1 2 2 7 0 12 0 3 3 8 0 13 0 4 4 9 0 14 0 5 5 10 0 15 0
简化写法
如果不想单独存储i1,可以直接合并为一行代码:
df[, sapply(df, function(x) length(unique(x)) == 1)] <- c(1, rep(0, nrow(df)-1))
逻辑说明
sapply(df, function(x) length(unique(x)) == 1)直接筛选出所有值全相同的列replace_vec的长度和数据框行数完全匹配,R会自动将该向量赋值给每一个目标列
内容的提问来源于stack exchange,提问作者nando_5g
相关产品推荐
相关产品推荐

