将因子转换为整数,同时保持因子级别排序

sta*_*010 3 r dataframe r-factor

我有一个R数据帧,其中一列是其级别具有隐式排序的因子.如何以下列方式将因子级别转换为特定整数:

  • "非常不同意" - > 1
  • "有点不同意" - > 2
  • "中立" - > 3
  • "有点同意" - > 4
  • "非常同意" - > 5

例如,这是我的数据框:

agree <- c("Strongly agree", "Somewhat disagree", "Somewhat agree",
           "Neutral", "Strongly agree", "Strongly disagree", "Neutral")
age <- c(41, 35, 29, 42, 31, 22, 58)

df <- data.frame(age, agree)
df
#   age             agree
# 1  41    Strongly agree
# 2  35 Somewhat disagree
# 3  29    Somewhat agree
# 4  42           Neutral
# 5  31    Strongly agree
# 6  22 Strongly disagree
# 7  58           Neutral

str(df)
# 'data.frame': 7 obs. of  2 variables:
#  $ age  : num  41 35 29 42 31 22 58
#  $ agree: Factor w/ 5 levels "Neutral","Somewhat agree",..: 4 3 2 1 4 5 1
Run Code Online (Sandbox Code Playgroud)

现在,我想agree使用上面显示的映射将列转换为整数列.

我已经搜索了关于将因子转换为整数的其他问题,但它们与维持因子排序无关.

" 如何在不丢失信息的情况下将因子转换为整数\数字? "

" 将因子转换为整数 "

" 在数据框中将因子转换为整数 "

tlu*_*luh 6

您需要首先定义因子的顺序:

ordering <- c("Strongly disagree", "Somewhat disagree", "Neutral", "Somewhat agree", "Strongly agree")
Run Code Online (Sandbox Code Playgroud)

然后,当您第一次创建因子时,您应该使用该定义:

agreeFactor <- factor(agree, levels = ordering)
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够获得您订购的因素:

as.numeric(agreeFactor)
Run Code Online (Sandbox Code Playgroud)

您也可以在使用as.numeric()时应用订单,但如果您决定稍后检索数字向量并忘记应用"levels ="参数,则会导致不一致.

e:如果要将数字直接导入数据框,只需使用:

df$agree <- as.numeric(factor(df$agree, levels = ordering))
Run Code Online (Sandbox Code Playgroud)