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

时间:2014-12-28 12:32:22

标签: 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 ...

dplyr::glimpse(data)我得到更多的值,但没有关于因子级数量/值的信息。是否有自动方法获取data.frame中所有因子变量的所有级别信息?

更多信息的简短表格
levels(data$fac1)
levels(data$fac2)
levels(data$fac3)

或更确切地说是

之类的优雅版本
for (n in names(data))
  if (is.factor(data[[n]])) {
    print(n)
    print(levels(data[[n]]))
  }

THX 克里斯托夫

7 个答案:

答案 0 :(得分:20)

以下是一些选项。我们遍历了数据'使用sapply并获取每列的levels(假设所有列均为factor类)

sapply(data, levels)

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

library(dplyr)
data %>% 
     sapply(levels)

另一个选项是来自summarise_each的{​​{1}},我们在dplyr内指定levels

funs

答案 1 :(得分:4)

更简单的方法是使用sqldf包并使用select distinct语句。这样可以更轻松地自动获取因子级别的名称,然后将其指定为其他列/变量的级别。

通用代码段是:

library(sqldf)
    array_name = sqldf("select DISTINCT *colname1* as '*column_title*' from *table_name*")

使用iris数据集的示例代码:

df1 = iris
factor1 <- sqldf("select distinct Species as 'flower_type' from df1")
factor1    ## to print the names of factors

输出:

  flower_type
1      setosa
2  versicolor
3   virginica

答案 2 :(得分:1)

或使用purrr:

data %>% purrr:map(levels)

或者首先将一切分解:

data %>% dplyr::mutate_all(as.factor) %>% purrr:map(levels)

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

data %>% map(levels) %>% map(length)

答案 3 :(得分:1)

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

  

唯一(df $ x)

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

  

唯一(iris $ Species)

答案 4 :(得分:0)

如果只想显示声明为as.factor的列,则可以使用:

lapply(df[sapply(df, is.factor)], levels)

答案 5 :(得分:0)

获取“数据” .frame中级别长度的替代选项:

data_levels_length <- sapply(seq(1, ncol(data)), function(x){
  length(levels(data[,x]))
})

答案 6 :(得分:0)

作为长数据框(tibble):

df %>% gather(name, value) %>% count(name, value)

这会将所有列转换为名称-值对,然后计算唯一级别。

子集列类型,例如:

df %>% select_if(is.character) %>% ...

通过https://stackoverflow.com/a/47122651/3217870