目标是在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功能?
答案 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)
您可以合并ifelse
和car::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