在其上应用gsub之后,保持因子的顺序

时间:2018-06-26 13:36:51

标签: r

我有这个向量:

x <- factor(c("A.B", "C.D", "U.X", "X.U", "A.A"))

然后排序:

x <- factor(x, levels=rev(levels(x)), ordered=T)
x
[1] A.B C.D U.X X.U A.A
Levels: X.U < U.X < C.D < A.B < A.A

我要删除“。”并用空格代替:

x <- as.factor(gsub(".", " ", x, fixed=TRUE))

但这不会使因素保持完整:

x
[1] A B C D U X X U A A
Levels: A A A B C D U X X U
str(x)
Factor w/ 5 levels "A A","A B","C D",..: 2 3 4 5 1

我如何在保持x顺序的同时进行替换?

2 个答案:

答案 0 :(得分:3)

您必须在因素的levels上进行操作:

x <- factor(c("A.B", "C.D", "U.X", "X.U", "A.A"))
x <- factor(x, levels=rev(levels(x)), ordered=T)
levels(x) <- gsub(".", " ", levels(x), fixed=TRUE)
x
# [1] A B C D U X X U A A
# Levels: X U < U X < C D < A B < A A
str(x)
# Ord.factor w/ 5 levels "X U"<"U X"<"C D"<..: 4 3 2 1 5

通过这种方式,除了因子水平的显示方式外,您的顺序因子不会改变。

答案 1 :(得分:2)

删除“。”之后。您可以像以前一样重新排序x

x <- factor(x, levels=rev(levels(x)), ordered=T)

或者您可以通过这种方式在同一行中进行替换和重新排序

x <- factor(as.factor(gsub(".", " ", x, fixed=TRUE)), levels=rev(levels(as.factor(gsub(".", " ", x, fixed=TRUE)))), ordered=T)