【问题标题】:Levels function returning NULL级别函数返回 NULL
【发布时间】:2018-07-17 04:35:18
【问题描述】:

我希望这是一个简单的解决方法。每当我运行 levels(df) 时,我都会给出一个 NULL 输出。这并不特定于我的数据框,因为它发生在我使用的任何数据集上。我在想我的一个包裹可能有问题。有没有人遇到过这个或知道修复?谢谢

【问题讨论】:

  • levels 告诉你一个因素的水平。它不直接应用于数据帧
  • levels 查看对象的levels 属性。 data.frames 不一定有一个,因此 NULL 输出。

标签: r null levels


【解决方案1】:

初始化数据框时,在初始化时传入stringsAsFactors = T

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

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

【讨论】:

  • 这为我修好了。
【解决方案2】:

您只能在因子向量上运行 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`)。这是因为它已被强制转换为字符向量。

【讨论】:

  • 知道为什么apply(df,2,levels) 也会返回NULL
猜你喜欢
  • 1970-01-01
  • 2021-03-31
  • 2016-01-30
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多