列出data.frame的所有因子级别

ckl*_*uss 20 r dataframe r-factor

str(data)我得到的head水平(1-2值)

fac1: Factor w/ 2  levels ... :
fac2: Factor w/ 5  levels ... :
fac3: Factor w/ 20 levels ... :
val: num ...
Run Code Online (Sandbox Code Playgroud)

dplyr::glimpse(data)我得到因子水平的数/值更多的价值,但没有相关信息.是否有自动方法获取data.frame中所有因子变量的所有级别信息?一个包含更多信息的简短表格

levels(data$fac1)
levels(data$fac2)
levels(data$fac3)
Run Code Online (Sandbox Code Playgroud)

或者更准确地说是一个优雅的版本

for (n in names(data))
  if (is.factor(data[[n]])) {
    print(n)
    print(levels(data[[n]]))
  }
Run Code Online (Sandbox Code Playgroud)

克里斯托夫

akr*_*run 22

这里有一些选择.我们遍历"数据" sapply并获取levels每列(假设所有列都是factor类)

sapply(data, levels)
Run Code Online (Sandbox Code Playgroud)

或者如果我们需要pipe(%>%)它,可以这样做

library(dplyr)
data %>% 
     sapply(levels)
Run Code Online (Sandbox Code Playgroud)

或者另一种选择是summarise_eachdplyr我们指定levels的位置funs.

 data %>%
      summarise_each(funs(list(levels(.))))
Run Code Online (Sandbox Code Playgroud)

  • 我们如何获得所有这些级别的长度 (3认同)

小智 7

如果您的问题是专门输出一个因子的所有级别的列表,那么我找到了一个简单的解决方案:

独特的(df$x)

例如,对于臭名昭著的 iris 数据集:

独特的(鸢尾$物种)


Ami*_*hli 5

或者使用 purrr:

data %>% purrr::map(levels)
Run Code Online (Sandbox Code Playgroud)

或者首先分解所有内容:

data %>% dplyr::mutate_all(as.factor) %>% purrr::map(levels)
Run Code Online (Sandbox Code Playgroud)

并回答有关如何获得长度的问题:

data %>% map(levels) %>% map(length)
Run Code Online (Sandbox Code Playgroud)