水平函数返回 NULL
Levels function returning NULL
我希望这是一个简单的修复。每当我 运行 levels(df) 时,我都会得到 NULL 输出。这并不特定于我的数据框,因为它发生在我使用的任何数据集中。我在想我的一个包裹可能有问题。有没有人 运行 对此感兴趣或知道修复方法?谢谢
您只能在因子向量上 运行 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)
returns NULL
的问题。
请注意 apply()
文档中的以下内容:
In all cases the result is coerced by as.vector to one of the basic
vector types before the dimensions are set, so that (for example)
factor results will be coerced to a character array.
当您尝试使用 class 并尝试一些其他功能时,您会看到此行为。
> 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
设置的先验 ordering/levels(请参阅列`a`
)。这是因为它已被强制转换为字符向量。
初始化dataframe时,在初始化中传递stringsAsFactors = T
例如。 dataFrame <- read.csv(file.choose(), stringsAsFactors=T)
这使得 R 将字符串值视为因子。
希望对您有所帮助
我希望这是一个简单的修复。每当我 运行 levels(df) 时,我都会得到 NULL 输出。这并不特定于我的数据框,因为它发生在我使用的任何数据集中。我在想我的一个包裹可能有问题。有没有人 运行 对此感兴趣或知道修复方法?谢谢
您只能在因子向量上 运行 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)
returns NULL
的问题。
请注意 apply()
文档中的以下内容:
In all cases the result is coerced by as.vector to one of the basic vector types before the dimensions are set, so that (for example) factor results will be coerced to a character array.
当您尝试使用 class 并尝试一些其他功能时,您会看到此行为。
> 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
设置的先验 ordering/levels(请参阅列`a`
)。这是因为它已被强制转换为字符向量。
初始化dataframe时,在初始化中传递stringsAsFactors = T
例如。 dataFrame <- read.csv(file.choose(), stringsAsFactors=T)
这使得 R 将字符串值视为因子。 希望对您有所帮助