从SPSS到R的AUTORECODE

Die*_*oal 2 r spss

我想编写一个与SPSS命令AUTORECODE相同的函数.

AUTORECODE将字符串和数字变量的值重新编码为连续的整数,并将重新编码的值放入称为目标变量的新变量中.

起初我尝试过这种方式:

AUTORECODE <- function(variable = NULL){
    A <- sort(unique(variable))
    B <- seq(1:length(unique(variable)))
    REC <- Recode(var = variable, recodes = "A = B")
    return(REC)
}
Run Code Online (Sandbox Code Playgroud)

但这会导致错误.我认为问题是由A和B提交给recodes参数引起的.这就是我尝试的原因

eval(parse(text = paste("REC <- Recode(var = variable, recodes = 'c(",A,") = c(",B,")')")))
Run Code Online (Sandbox Code Playgroud)

在功能内.但这不是正确的解决方案.

想法?

Aar*_*ica 5

factor可能只是你需要的东西,正如詹姆斯在评论中建议的那样,它将它们作为整数存储在幕后(如图所示str)并输出相应的标签.这可能也非常有用,因为R有许多适当处理因子的命令,例如在拟合线性模型时,它会为您生成所有"虚拟"变量.

> x <- LETTERS[c(4,2,3,1,3)]
> f <- factor(x)
> f
[1] D B C A C
Levels: A B C D   

> str(f)
 Factor w/ 4 levels "A","B","C","D": 4 2 3 1 3
Run Code Online (Sandbox Code Playgroud)

如果您只需要数字,请使用as.integer因子.

> n <- as.integer(f)
> n
[1] 4 2 3 1 3
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用match,但如果您从浮点数开始,请注意浮点陷阱. factor首先将所有内容转换为字符,这有效地将浮点数舍入到一定数量的数字,使得浮点陷阱不再受到关注.

> match(x, sort(unique(x)))
[1] 4 2 3 1 3
Run Code Online (Sandbox Code Playgroud)