3

目的是在 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 what 返回与 R 相同的输出的可能性。

有没有人有一个与 SPSS 工作方式相同的 R 函数?

4

4 回答 4

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)
于 2013-03-03T08:13:12.030 回答
2

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

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

使用它来重置数据集:

InsectSprays <- datasets::InsectSprays
于 2013-02-28T13:23:09.267 回答
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
## > 
于 2013-02-28T16:52:32.930 回答
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
于 2017-06-12T23:26:41.860 回答