您只能在因子向量上运行 levels,而不能在数据框上运行。
以下示例
> df <- data.frame(a = factor(c('a','b','c'), levels = c('a','b','c','d','e')),
+ b = factor(c('a','b','c')),
+ c = factor(c('a','a','c')))
> levels(df)
NULL
要查看数据框中每一列的级别,可以使用lapply
> lapply(df, levels)
$a
[1] "a" "b" "c" "d" "e"
$b
[1] "a" "b" "c"
$c
[1] "a" "c"
如果您想要特定列的级别,您可以指定:
> levels(df[, 2])
[1] "a" "b" "c"
编辑:回答下面关于为什么apply(df, 2, levels) 返回NULL 的问题。
请注意apply() 的文档中的以下内容:
在所有情况下,结果都被 as.vector 强制转换为基本的之一
设置维度之前的向量类型,因此(例如)
因子结果将被强制转换为字符数组。
当您尝试上课并尝试其他一些功能时,您会看到这种行为。
> apply(df, 2, levels)
NULL
> apply(df, 2, class)
a b c
"character" "character" "character"
> apply(df, 2, function(i) levels(i))
NULL
> apply(df, 2, function(i) levels(factor(i)))
$`a`
[1] "a" "b" "c"
$b
[1] "a" "b" "c"
$c
[1] "a" "c"
请注意,即使我们可以强制 apply() 将列视为因素,我们也会丢失最初创建时为 df 设置的先前排序/级别(参见列 `a`)。这是因为它已被强制转换为字符向量。