2013-02-20 50 views
1

我想編寫一個與SPSS命令AUTORECODE完全相同的函數。AUTORECODE從SPSS到R

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,")')"))) 

內的功能。但這不是正確的解決方案。

想法?

+0

如果我沒有弄錯,這不是什麼'因素'嗎? – James 2013-02-20 15:42:19

+0

@James:'as.numeric(factor(。))'來獲得實際的整數,但是。 – Aaron 2013-02-20 15:46:11

+0

因子將變量中的唯一值作爲等級返回。該功能應返回級別,從1開始。 – Diegoal 2013-02-20 15:48:39

回答

4

factor可能正是你所需要的,正如James在評論中所建議的,它將它們作爲整數存儲在幕後(如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