题
每次我必须重新编码一些变量时,我都会牢记SPSS RECODE函数。我必须承认这很简单。有类似的 recode
功能在 car
包装,它可以解决问题,但让我们以我想完成工作的前提为 factor
.
我有 data.frame
有几个变量为1到7的变量。我想“反向”变量值,因此用7s,2s,6s,3s,带有5s等。我可以使用 factor
功能:
# create dummy factor
set.seed(100)
x <- as.factor(round(runif(100,1,7)))
y <- factor(x, levels = rev(levels(x)))
如果我运行:
> levels(x)
[1] "1" "2" "3" "4" "5" "6" "7"
> levels(y)
[1] "7" "6" "5" "4" "3" "2" "1"
当我想回顾没有相等水平的因素时,问题就开始了。如果某个因素(Z)有水平 c("1", "3", "4", "6", "7")
, ,我是否有可能“反向”级别,因此1 = 7、2 = 6、3 = 5等。 factor
功能?
其他有效的回顾功能就足够了!
解决方案
您必须提供 levels
因素的论点(如德克所写):
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
您也可以在现有因素上做到这一点
( 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
如您所见,愿望顺序扩大了。
其他提示
是的,只需分配 levels
:
R> set.seed(100)
R> x <- as.factor(round(runif(100,1,7)))
R> table(x)
x
1 2 3 4 5 6 7
3 16 20 19 18 17 7
R> levels(x) <- LETTERS[1:7]
R> table(x)
x
A B C D E F G
3 16 20 19 18 17 7
R>
如果您完成了因素水平,那么您就可以了:
df <- data.frame(x=factor(c(2,4,5,6)))
df$x <- factor(df$x, levels = 7:1)
table(df$x)
7 6 5 4 3 2 1
0 1 1 1 0 1 0
在这种情况下,由于您有数字,为什么不只是使用模块化算术转换数字呢?
例如
levels(x) <- as.character((6*as.numeric(levels(x)))%%7+1)
如果使用较大的范围,请根据适当地修改6和7。
不隶属于 StackOverflow