在不改变数值顺序的情况下重新排列因子的水平

我有一些数值变量和一些分类factor变量的数据框。 这些因素的级别顺序并不是我希望它们成为的方式。

numbers <- 1:4
letters <- factor(c("a", "b", "c", "d"))
df <- data.frame(numbers, letters)
df
#   numbers letters
# 1       1       a
# 2       2       b
# 3       3       c
# 4       4       d

如果我改变关卡的顺序,那么这些关键字就不再有相应的数字了(我的数据从这个意义上说是无稽之谈)。

levels(df$letters) <- c("d", "c", "b", "a")
df
#   numbers letters
# 1       1       d
# 2       2       c
# 3       3       b
# 4       4       a

我只是想改变水平顺序,所以当绘图时,条形图以所需的顺序显示 - 这可能与默认的字母顺序不同。


使用factorlevels参数:

df <- data.frame(f = 1:4, g = letters[1:4])
df
#   f g
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d

levels(df$g)
# [1] "a" "b" "c" "d"

df$g <- factor(df$g, levels = letters[4:1])
# levels(df$g)
# [1] "d" "c" "b" "a"

df
#   f g
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d

更多,只是为了记录

## reorder is a base function
df$letters <- reorder(df$letters, new.order=letters[4:1])

library(gdata)
df$letters <- reorder.factor(df$letters, letters[4:1])

你也可能会发现有用的Relevel和combine_factor。


所以你在R词典中想要的只是改变给定因子变量的标签 (即,保留数据以及因子水平不变)。

df$letters = factor(df$letters, labels=c("d", "c", "b", "a"))

考虑到您只想更改数据点到标签的映射关系,而不是数据或因素模式(数据点如何分为单独的数据块或因子值,那么可能有助于了解在最初创建时最初设置映射的方式因素。

规则很简单:

  • 标签通过索引值被映射到级别(即,级别[2]处的值被赋予标签,标签[2]);
  • 因子水平可以通过在水平参数中传递它们来显式设置; 要么
  • 如果没有为levels参数提供值,则使用默认值,这是对传入的数据向量唯一的结果(对于数据参数);
  • 标签可以通过标签参数显式设置; 要么
  • 如果没有为标签参数提供值,则使用默认值,这就是水平向量
  • 链接地址: http://www.djcxy.com/p/24939.html

    上一篇: Reorder levels of a factor without changing order of values

    下一篇: Arithmetic operations on R factors