gpt4 book ai didi

r - 2017 年 4 月将禁止因子中的重复级别。级别功能如何?

转载 作者:行者123 更新时间:2023-12-03 17:39:50 26 4
gpt4 key购买 nike

在 R-devel 列表中,Martin Maechler 发布了一条关于因子重复水平的消息

"factors with non-unique (duplicated) levels have been deprecated since 2009 -- are more deprecated now ..." June 4, 2016



它指出,在计划于 2017 年 4 月发布的 R 3.4 中,重复级别将导致错误,而不再只是警告。

我想知道为什么级别功能不会引起类似的警告?在这里,我以两种方式将前三个级别组合为“a”,一种已弃用。

例子
> x <- c("a", "b", "c", "d")
> xf <- factor(x, levels = c("a", "b", "c", "d"),
labels = c("a", "a", "a", "d"))
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL)
as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
> xf <- factor(x)
> levels(xf) <- c("a", "a", "a", "d")
> xf
[1] a a a d
Levels: a d

我想了解为什么 R 对后者的处理方式与前者不同。

这是级别的记录行为,我没有利用未说明的元素。在?levels 中,有一个允许重复级别的示例。我会把它粘贴进去以节省您的查找时间。
## combine some levels
z <- gl(3, 2, 12, labels = c("apple", "salad", "orange"))
z
levels(z) <- c("fruit", "veg", "fruit")
z

最佳答案

因子用于创建分类变量。 Levels这个变量的属性代表了不同的类别。变量不能有重复的类别。它没有任何意义。但是,变量可以具有相同类别的重复数据值。

分类变量内的数据表示为整数向量。使用 unclass查看整数向量。 levels 属性代表这个变量的类别。例如,这个变量的第一个值属于一个特定的类别,它将被分配编号 1。如果它是一个有序因子,那么最低的类别将被分配编号 1。

x <- c(letters[1:3], letters[1:3])
xf <- factor(x)

xf
# [1] a b c a b c
# Levels: a b c

attributes(xf)
# $levels
# [1] "a" "b" "c"
#
# $class
# [1] "factor"

unclass(xf)
# [1] 1 2 3 1 2 3
# attr(,"levels")
# [1] "a" "b" "c"

如果一个类别在变量中没有值,那么它将被分配为 NA .
factor(c("a", "b", "c"), levels = c("e", "f", "g"))
# [1] <NA> <NA> <NA>
# Levels: e f g
labels是用于更改类别名称的可选参数。如果变量具有根据 levels 参数的数据值,则将向其提供 labels 参数中的值。请注意,值“e”被赋予了类别“h”。
factor(c("a", "b", "e"), levels = c("e", "f", "g"), labels = c("h", "i", "j"))
# [1] <NA> <NA> h
# Levels: h i j

现在 levels()是一个替换函数,用于更改因子变量中存在的数据。 levels()中使用的数据函数必须对应于因子变量。否则会产生垃圾。
xf
# [1] a b c a b c
# Levels: a b c

带有“a”的值更改为“e”,“b”更改为“f”,“c”更改为“g”。此示例显示如何正确转换因子变量的类别名称。
levels(xf) <- c("e", "f", "g", "e", "f", "g")
> xf
# [1] e f g e f g
# Levels: e f g

现在垃圾类型:注意数据不对应因子变量 xf .要查看整数向量,请使用 unclass(xf) .
levels(xf) <- c("m", "m", "m", "n", "n", "n")
xf
# [1] m m m m m m
# Levels: m n

关于r - 2017 年 4 月将禁止因子中的重复级别。级别功能如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com