2013-02-28 45 views
2

目標是模擬R中的SPSS recode過程。複製命令很難翻譯。如何在R中複製SPSS recode函數?

在SPSS我有代碼

RECODE A (1,2 = 1) (3,4 = copy) (8 thru hi = 3) (else = 1) into B. 

施加在它看起來像

A <- c(1,2,3,4,5,NA,7,8,9) 

我得到以下的(SPSS)結果:

A = 1,1,3,4,1,1,1,3,3 

在該R類似的代碼將如下所示:

B <- Recode(A, recodes = ("c(1,2) = 1; c(3,4) = c(3,4); c(8,9) = 3; else = 1"), as.numeric.result = TRUE) 

A = 1,1,3,4,1,1,1,3,3 

一般問題是指示SPSS-copy語句中的值。在這裏,我寫了c(3,4)= c(3,4) - 當然,它不起作用。

在SPSS中還存在可能性,說else =複製什麼返回相同的輸出作爲R do。

有沒有人有與SPSS一樣工作的R函數?

回答

2

使用levels函數。下面是與例如一個內置的數據集:

InsectSprays 
levels(InsectSprays$spray)<-list(new1=c("A","C"),YEPS=c("B","D","E"),LASTLY="F") 
InsectSprays 

利用這個重置數據集:

InsectSprays <- datasets::InsectSprays 
+0

對不起,這個問題沒有正確formulatet究竟 – Diegoal 2013-02-28 15:15:01

1

您可能要檢查出car包。不幸的是,沒有「複製」功能可用。

library(car) 
?recode 
A <- c(1,2,3,4,5,NA,7,8,9) 
B <- recode(A, "c(1,2) = 1; 3 = 3; 4 = 4; 8:hi = 3; else = 1") 
B 

## SPSS result: A = 1,1,3,4,1,1,1,3,3 
## > B 
## [1] 1 1 3 4 1 1 1 3 3 
## > 
+0

這個問題。對於3和4的整數,重新編碼轉換爲R是沒有問題的。如果我有一個非整數值的範圍發生問題。 – Diegoal 2013-02-28 17:29:58

+0

@diegoal不知道我明白你的意思。請相應地更新您的問題。 – 2013-02-28 18:16:44

2

您可以結合ifelsecar::recode達到你想要的結果。

library(car) 
A <- c(1,2,3,4,5,NA,7,8,9) 
B <- ifelse(A %in% c(3,4), A, recode(A, "c(1,2) = 1; 8:hi = 3; else = 1")) 
cbind(A, B) 
0
library(expss) 
a = c(1,2,3,4,5,NA,7,8,9) 
# '%into%' supports multi-value assignment, eg: ... %into% (a1 %to% a3) 
recode(a, 1:2 ~ 1, 3:4 ~ copy, 8 %thru% hi ~ 3, other ~ 1) %into% b 
b 
# 1 1 3 4 1 1 1 3 3 

,或者用標準的R分配:

b = recode(a, 1:2 ~ 1, 3:4 ~ copy, 8 %thru% hi ~ 3, other ~ 1) 
b 
# 1 1 3 4 1 1 1 3 3