如何在R语言中批量查看所有字符/因子型变量的唯一值与水平
R批量提取数据框分类变量取值方案
问题场景
用R处理大型数据集时,逐个查询每个字符型、因子型变量的唯一值或水平非常耗时。
示例测试数据
library(tidyverse) d = tibble(age = rnorm(10, 50, 3), sex = rep(c("male", "female"), 5), name = letters[1:10]) %>% mutate(sex = as.factor(sex)) d
运行上述代码即可查看示例数据的预览效果
原有操作的痛点
大型数据集通常包含大量分类变量,逐个核对变量取值效率极低,例如单独查询sex变量水平的代码为:
levels(d$sex)
运行仅返回结果:[1] "female" "male",变量数量多时重复操作会浪费大量时间。
批量实现代码
列表格式输出(适合快速查看)
直接返回命名列表,每个列表项对应一个分类变量的所有取值:
d %>% # 自动筛选所有因子型、字符型列 select(where(~ is.factor(.x) | is.character(.x))) %>% # 因子列提取水平,字符列提取去重唯一值 map(~ if (is.factor(.x)) levels(.x) else unique(.x))
长表格式输出(适合导出/整理)
如果需要结构化的表格结果,可以用以下代码返回两列数据:variable列为变量名,value列为对应变量的取值:
d %>% select(where(~ is.factor(.x) | is.character(.x))) %>% map_dfr(~ tibble(value = if (is.factor(.x)) levels(.x) else unique(.x)), .id = "variable")
- 上述代码无需手动指定变量名,会自动识别所有符合要求的列
- 兼容普通data.frame和tibble格式的数据集
- 大型数据集下运行效率远高于手动逐个查询
内容的提问来源于stack exchange,提问作者st4co4
相关产品推荐
相关产品推荐

