2

我想编写一个与 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)
}

但这会导致错误。我认为这个问题是由 A 和 B 对 recodes 论点的承诺引起的。这就是我尝试的原因

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

函数内。但这不是正确的解决方案。

想法?

4

1 回答 1

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

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

> n <- as.integer(f)
> n
[1] 4 2 3 1 3

另一种解决方案是使用match,但如果您从浮点数开始,请注意浮点陷阱。 factor首先将所有内容转换为字符,这有效地将浮点数四舍五入到一定数量的数字,从而减少浮点陷阱的问题。

> match(x, sort(unique(x)))
[1] 4 2 3 1 3
于 2013-02-20T17:00:30.063 回答