我想编写一个与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)
在功能内.但这不是正确的解决方案.
想法?
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)
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |