如何在R中通用识别数据表中所有值一致的列?
识别data.table中所有值完全相同的列
需求说明
需要识别data.table中所有条目值完全一致的列,涵盖以下场景:
- 全NA列
- 固定数值列(如0、1、999等)
- 固定字符/空字符串列(如"E"、""等)
现有代码仅能单独识别全NA、全0、全1列,需通用解决方案,无需针对每种重复值单独编写逻辑。
示例数据
library(data.table) library(random) AlphaNum <- randomStrings(n=10, len=3, digits=T, upperalpha=T, loweralpha=TRUE, unique=F, check=T) tat <- data.table( Nums=1:10, blankr1=rep(NA,10), Leters=LETTERS[1:10], niner=rep(999,10), blankr2=rep('',10), Er=LETTERS[5], AlphaNum=AlphaNum, AlphaNumr=rep('9e4UU',10), zeror=rep(0,10), oner=rep(1,10) )
通用解决方案
# 识别所有值完全相同的列 uniform_cols <- names(tat)[tat[, lapply(.SD, function(x) length(unique(x)) == 1)]] # 输出结果 uniform_cols
代码说明
- 核心逻辑:对每一列计算唯一值的数量,若数量为1,则说明该列所有条目值完全相同(包括全NA的情况,因为
unique(rep(NA,10))返回长度为1的NA向量)。 - 通用性:无需区分数据类型,也不用针对特定固定值编写判断,一次处理所有符合条件的列。
- 输出:直接返回所有符合条件的列名。
内容的提问来源于stack exchange,提问作者Will Phillips
相关产品推荐
相关产品推荐

