如何在R中复制SPSS重新编码功能?

时间:2013-02-28 13:05:35

标签: r spss

目标是在R中模拟SPSS重新编码过程。复制命令很难翻译。

在SPSS中,我的代码为

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

应用于看起来像

的A.
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 = copy返回与R do相同的输出。

有没有人有一个与SPSS一样的R功能?

4 个答案:

答案 0 :(得分:2)

使用levels功能。以下是内置数据集的示例:

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

使用它来重置数据集:

InsectSprays <- datasets::InsectSprays

答案 1 :(得分: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)

答案 2 :(得分: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
## > 

答案 3 :(得分: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