R语言 列出数据框的所有因子水平

ppcbkaq5  于 2023-01-10  发布在  其他
关注(0)|答案(8)|浏览(372)

通过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)我得到了更多的值,但没有关于因子水平的数量/值的信息。是否有一种自动的方式来获得 Dataframe 中所有因子变量的所有水平信息?

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]]))
  }

感谢克里斯托夫

z31licg0

z31licg01#

这里有一些选项。我们用sapply循环遍历'data',得到每列的levels(假设所有列都是factor类)

sapply(data, levels)

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

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

或者另一个选项是dplyr中的summarise_each,其中我们在funs中指定levels

data %>%
      summarise_each(funs(list(levels(.))))
noj0wjuj

noj0wjuj2#

如果您的问题是专门输出一个因子的所有水平的列表,那么我找到了一个简单的解决方案:
唯一(df$x)
例如,对于臭名昭著的虹膜数据集:
唯一(虹膜$物种)

3b6akqbq

3b6akqbq3#

或使用咕噜声:

data %>% purrr::map(levels)

或者首先对所有事物进行因式分解:

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

回答如何得到长度的问题:

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

vltsax254#

更简单的方法是使用sqldf包并使用select distinct语句,这样可以更容易地自动获取因子水平的名称,然后将其指定为其他列/变量的水平。
泛型代码段为:

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

使用虹膜数据集的示例代码:

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
zu0ti5jz

zu0ti5jz5#

如果您希望仅显示声明为as.factor的列的因子水平,您可以用途:

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

tgabmvqs6#

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

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

oaxa6hgo7#

作为长 Dataframe (tibble):

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

这会将所有列转换为名称-值对,然后对唯一级别进行计数。
使用以下内容对列类型进行子集化:

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

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

cyvaqqii

cyvaqqii8#

df$factor %>% unique() %>% str()

返回级别列表和级别数

相关问题