Levels函数返回NULL

时间:2018-02-07 01:11:12

标签: r null levels

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

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:5)

您只能在因子向量上运行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" 的文档中的以下内容:

  

在所有情况下,结果都会被as.vector强制转换为其中一个基本结果   设置尺寸之前的矢量类型,以便(例如)   因子结果将被强制转换为字符数组。

当您尝试上课时,可以看到此行为,并尝试其他一些功能。

apply()

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