将因子水平更改为某列的自定义顺序

3
我有一个如下的数据框:
> 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"

默认情况下,自行车的因子水平设置为1,汽车为2,自行车为3。我需要将因子水平更改为汽车为1,自行车为2,自行车为3 - 我该怎么做?


1
data$veh <- factor(data$veh, levels = c("car", "cycle", "bike"), ordered = TRUE )在levels参数中指定自定义顺序。 - Sathish
之后检查值 unclass(data$veh)as.integer(data$veh) - Sathish
抱歉@Satish,在发布答案之前没有注意到你的评论。 - Ben Bolker
2个回答

6

虽然使用tidyverse/forcats的解决方案没有问题,但是基于R语言的解决方案是使用factor()函数,并通过指定levels参数来获得所需排序:

data$veh <- factor(data$veh, levels=c("car","cycle","bike"))

与常见的看法相反,除非你特别想将焦点变量视为序数变量(在这种情况下,默认情况下 R 将使用正交多项式对比,而不是处理对比),或者想要能够在变量上使用比较运算符(例如veh > "car"),否则通常情况下不需要设置ordered=TRUE(即使普通因子也具有排序)。如果你不确定,那么默认(普通)因子可能就足够了。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接