我希望这很容易解决。每当我运行级别(DF(时,我都会给出一个空输出。这不是我的数据框架特定的,因为它使用了我使用的任何数据集。我认为我的一个包裹可能存在问题。有人遇到过这个问题还是知道修复程序?谢谢
初始化dataframe时,在初始化中通过stringsasfactors = t
例如。dataFrame <- read.csv(file.choose(), stringsAsFactors=T)
这使得r将字符串值视为因素。希望它能帮助
您只能在因子向量上,而不是在数据框架上运行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()
的文档中的以下内容:
在所有情况下 设置尺寸之前的向量类型,以便(例如( 因子结果将被胁迫到角色阵列。
尝试上课并尝试其他一些功能时,您可以看到此行为。
> 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`
(。这是因为它已被强制为角色向量。