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)
我得到了更多的值,但没有关于因子水平的数量/值的信息。有没有一种自动方法可以获取数据帧中所有因子变量的所有水平信息?包含更多信息的简短表单
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]]))
}
感谢克里斯托弗
这里有一些选项。 我们使用sapply
遍历"数据"并获取每列的levels
(假设所有列都factor
类)
sapply(data, levels)
或者,如果我们需要管道(%>%
)它,这可以作为
library(dplyr)
data %>%
sapply(levels)
或者另一种选择是从dplyr
summarise_each
,我们在其中指定了funs
中的levels
。
data %>%
summarise_each(funs(list(levels(.))))
如果您的问题专门用于输出一个因子的所有级别的列表,那么我找到了一个简单的解决方案:
独一无二(DF$x)
例如,对于臭名昭著的鸢尾花数据集:
独特(鸢尾花$种)
或者使用咕噜声:
data %>% purrr::map(levels)
或者首先分解一切:
data %>% dplyr::mutate_all(as.factor) %>% purrr::map(levels)
并回答有关如何获得长度的问题:
data %>% map(levels) %>% map(length)
方法是使用 sqldf 包并使用选择非重复语句。这样可以更轻松地自动获取因子水平的名称,然后指定为其他列/变量的水平。
通用代码片段为:
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
如果您只想显示声明为as.factor
的列的因子水平,您可以使用:
lapply(df[sapply(df, is.factor)], levels)
在"data".frame 中获取级别长度的替代选项:
data_levels_length <- sapply(seq(1, ncol(data)), function(x){
length(levels(data[,x]))
})
作为长数据框(tibble):
df %>% gather(name, value) %>% count(name, value)
这会将所有列转换为名称-值对,然后计算唯一级别。
子集列类型,如下所示:
df %>% select_if(is.character) %>% ...
通过 https://stackoverflow.com/a/47122651/3217870
library(dplyr) #for all the following
df$factor %>% unique() %>% str()
列出并计算特定变量的级别频率
count(df,variable)
返回一个表,其中包含特定变量的级别及其频率。行数将告知此变量有多少个级别。
count(df,across())
返回观测值中共存的所有变量水平以及所有不同组合的频率的表