R语言如何获取数据集中实际存在的factor因子水平
如何列出R中因子实际存在的水平
实现方案
你可以通过以下几种常用方式实现需求:
方法1:组合内置函数实现
先过滤NA再删除未使用的水平,最后提取水平值:
# 直接运行即可得到目标结果 levels(droplevels(na.omit(df$v1)))
运行输出:
[1] "a" "b" "c"
逻辑说明:
na.omit(df$v1):先剔除因子中的NA值droplevels():删除因子中没有对应观测的冗余水平levels():提取处理后剩下的有效水平
方法2:逻辑索引实现
直接判断原水平是否在实际数据中出现,索引取值:
levels(df$v1)[levels(df$v1) %in% df$v1]
运行输出和方法1一致,如果你需要保留出现过的NA,无需额外过滤即可实现。
方法3:自定义函数封装
如果你需要频繁使用这个功能,可以封装为自定义函数,实现你举例的indata参数效果:
levels <- function(x, indata = FALSE, rm_na = TRUE) { # 兼容原生levels函数的默认行为 if (!indata) return(base::levels(x)) if (!is.factor(x)) stop("输入参数必须为因子类型") res <- base::levels(x)[base::levels(x) %in% x] if (rm_na) res <- stats::na.omit(res) as.character(res) }
封装后你就可以直接调用你期望的语法:
levels(df$v1, indata = TRUE)
输出结果:
[1] "a" "b" "c"
内容的提问来源于stack exchange,提问作者teppo
相关产品推荐
相关产品推荐

