将因子级别更改为列的自定义顺序

use*_*440 3 r dataframe

我有一个如下所示的数据框

> data = data.frame(name = c('Mike', 'Tony', 'Carol', 'Tim', 'Joe'), veh = c('car', 'bike', 'car', 'car', 'cycle') )
> data
   name   veh
1  Mike   car
2  Tony  bike
3 Carol   car
4   Tim   car
5   Joe cycle
> str(data$name)
 Factor w/ 5 levels "Carol","Joe",..: 3 5 1 4 2
> str(data$veh)
 Factor w/ 3 levels "bike","car","cycle": 2 1 2 2 3
> levels(data$veh)
[1] "bike"  "car"   "cycle"
Run Code Online (Sandbox Code Playgroud)

默认情况下,自行车的因子级别设置为 1,汽车的因子级别设置为 2,自行车的因子级别设置为 3。我需要将汽车的因子级别更改为 1,自行车的因子级别为 2,自行车的因子级别为 3 - 我该如何处理?

Ben*_*ker 6

tidyverse/ 解决方案没有任何问题,但 base-R 解决方案是与按所需顺序指定的参数一起forcats使用:factor()levels

data$veh <- factor(data$veh, levels=c("car","cycle","bike"))
Run Code Online (Sandbox Code Playgroud)

与普遍看法相反,ordered=TRUE在这种情况下通常没有必要(即使普通因素也有顺序),除非您特别希望将焦点变量视为序数变量(在这种情况下,R 将使用正交多项式对比,而不是处理对比,默认情况下),或者希望能够对变量使用比较运算符(例如veh > "car");如果您不确定,默认(普通)因素可能就可以。


akr*_*run 5

我们可以用fct_relevel

library(forcats)
data$veh <- fct_relevel(data$veh, c('car', 'cycle', 'bike'))
str(data$veh)
#Factor w/ 3 levels "car","cycle",..: 1 3 1 1 2
Run Code Online (Sandbox Code Playgroud)