通过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]]))
}
感谢克里斯托夫
8条答案
按热度按时间z31licg01#
这里有一些选项。我们用
sapply
循环遍历'data',得到每列的levels
(假设所有列都是factor
类)或者,如果我们需要通过管道传输(
%>%
),可以这样做或者另一个选项是
dplyr
中的summarise_each
,其中我们在funs
中指定levels
。noj0wjuj2#
如果您的问题是专门输出一个因子的所有水平的列表,那么我找到了一个简单的解决方案:
唯一(df$x)
例如,对于臭名昭著的虹膜数据集:
唯一(虹膜$物种)
3b6akqbq3#
或使用咕噜声:
或者首先对所有事物进行因式分解:
回答如何得到长度的问题:
vltsax254#
更简单的方法是使用sqldf包并使用select distinct语句,这样可以更容易地自动获取因子水平的名称,然后将其指定为其他列/变量的水平。
泛型代码段为:
使用虹膜数据集的示例代码:
输出:
zu0ti5jz5#
如果您希望仅显示声明为
as.factor
的列的因子水平,您可以用途:tgabmvqs6#
获取“数据”帧中级别长度的替代选项:
oaxa6hgo7#
作为长 Dataframe (tibble):
这会将所有列转换为名称-值对,然后对唯一级别进行计数。
使用以下内容对列类型进行子集化:
通过https://stackoverflow.com/a/47122651/3217870
cyvaqqii8#
返回级别列表和级别数