重新编码/重新定位具有不同级别的数据框架因子

aL3*_*3xa 10 r levels

每当我必须重新编码一组变量时,我都会考虑SPSS重新编码功能.我必须承认这很简单.包中有一个类似的recode功能car,它可以解决这个问题,但我们假设我希望完成任务factor.

我有data.frame几个变量值,范围从1到7.我想"反转"变量值,因此用7s替换1s,用6s替换2s,用5s替换3s等.我可以使用factor函数:

# create dummy factor
set.seed(100)
x <- as.factor(round(runif(100,1,7)))
y <- factor(x, levels = rev(levels(x)))
Run Code Online (Sandbox Code Playgroud)

如果我跑:

> levels(x)
[1] "1" "2" "3" "4" "5" "6" "7"
> levels(y)
[1] "7" "6" "5" "4" "3" "2" "1"
Run Code Online (Sandbox Code Playgroud)

当我想重新编码没有相同级别的因子时,问题就开始了.如果某个因子z有水平c("1", "3", "4", "6", "7"),是否有可能通过利用factor函数来"反转"水平,所以1 = 7,2 = 6,3 = 5等?

其他有效的重新编码功能就足够了!

Mar*_*rek 8

你必须为levels因子提供论证(如Dirk所写):

set.seed(2342472)
( x <- round(runif(10,1,7)) )
#  [1] 7 5 5 3 1 2 5 3 3 2
( xf <- as.factor(x) )
# [1] 7 5 5 3 1 2 5 3 3 2
# Levels: 1 2 3 5 7
( yf <- factor(x,levels=7:1) )
# [1] 7 5 5 3 1 2 5 3 3 2
# Levels: 7 6 5 4 3 2 1
Run Code Online (Sandbox Code Playgroud)

你也可以在现有因素上做到这一点

( yxf <- factor(xf,levels=7:1) )
# [1] 7 5 5 3 1 2 5 3 3 2
#Levels: 7 6 5 4 3 2 1
Run Code Online (Sandbox Code Playgroud)

如你所见,等级按需求顺序延伸.