Levels函数返回NULL

Wya*_*att 3 null r levels

我希望这是一个简单的解决方案.每当我运行level(df)时,我都会给出一个NULL输出.这不是我的数据框特有的,因为它与我使用的任何数据集一起出现.我想我的一个包可能有问题.有没有人碰到这个或知道修复?谢谢

小智 8

初始化数据帧时,在初始化中传递stringsAsFactors = T

例如。 dataFrame <- read.csv(file.choose(), stringsAsFactors=T)

这使得 R 将字符串值视为因子。希望有帮助


Bra*_*don 7

您只能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
Run Code Online (Sandbox Code Playgroud)

要查看数据框中每列的级别,您可以使用 lapply

> lapply(df, levels)
$a
[1] "a" "b" "c" "d" "e"

$b
[1] "a" "b" "c"

$c
[1] "a" "c"
Run Code Online (Sandbox Code Playgroud)

如果您想要特定列的级别,则可以指定:

> levels(df[, 2])
[1] "a" "b" "c"
Run Code Online (Sandbox Code Playgroud)

编辑:回答下面关于为何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"
Run Code Online (Sandbox Code Playgroud)

请注意,即使我们可以强制apply()将列视为因子,我们也会丢失先前df创建时设置的先前排序/级别(请参阅列`a`).这是因为它被强制转换为字符向量.

  • 知道为什么 `apply(df,2,levels)` 也返回 `NULL` 吗? (2认同)