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 克里斯托夫
答案 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) %>% ...