是否有R函数用于重新编码变量?

问题描述 投票:-2回答:4

我正在从SPSS过渡到R,但遇到了一些麻烦的问题。

例如,我正在尝试重新编码变量,但收到错误消息。我可以很容易地选择案例。这是一个类似的过程吗?

这是我要翻译的SPSS代码:

RECODE income (1, 2 = 1) (3, 4 = 2) INTO income2.
EXECUTE.

CROSSTABS income2 by income.

* Recode to String.
STRING sex_values (A8).
RECODE sex (1 = 'Male') (2 = 'Female') INTO sex_values.
EXECUTE.

CROSSTABS sex_values by sex.

感谢任何指针,我认为我很困惑。

干杯。

r spss
4个回答
0
投票

请有趣地看看一个名为recode的函数。

library(dplyr)
char_vec <- sample(c("a", "b", "c"), 10, replace = TRUE)
recode(char_vec, a = "Apple")

0
投票

为简单起见,您可以使用if_else()功能替换/重新编码R中的数据。

if_else(condition, true_result, false_result)检查条件是否满足,它返回true_result,否则返回false_result。

例如,x= 3if_else(x>2,"yes","no)将返回输出:

“是”


因此,在您的情况下,您可以使用以下内容:


if_else(sex==1,"Male","Female")
if_else(income==(1 | 2),1,2)

在这种情况下,您可以仅将数据的sex列和income列放在上述函数中以对其进行重新编码。


0
投票

与R中的许多事情一样,有很多方法可以做到这一点。

首先是使用ifelse功能。这是重新分类向量的有用功能,因为它的评估方式是在替换前满足条件,因此支持更复杂的陈述。

( x <- sample(1:2,20,replace=TRUE) )
  ifelse(x == 1, "male", ifelse(x == 2, "female", NA))
  ifelse(x == 1, "male", "female")
  ifelse(x == (1 | 2),"male","female")

您也可以直接替换向量中的元素

x[x == 1] <- "male"
x[x == 2] <- "female"
print(x)

也使用因子并使用levels进行编码

( x <- as.factor(sample(1:2,20,replace=TRUE)) )
levels(x)[1] <- "male"
levels(x)[2] <- "female"
print(x)

0
投票

假设您有一个数字向量,其中包含集合1、2、3、4中的数字,并且您想将1和2替换为“ male”,将3和4替换为“ female”,那么这里有一些替代方法。

1]因子这将创建一个因子。如果需要字符向量,可以使用as.character(income2)

income <- c(2, 1, 4, 3, 1, 4, 2)
income2 <- factor(income, levels = 1:4, labels = c("male", "male", "female", "female"))
income2
## [1] male   male   female female male   female male  
## Levels: male female

[2)下标这将创建一个字符向量

income2 <- c("male", "male", "female", "female")[income]
income2
## [1] "male"   "male"   "female" "female" "male"   "female" "male"  

3] car :: recode car软件包中有一个recode函数(dplyr软件包中还有一个稍微不同的函数,其他软件包中可能还有其他函数)。这将创建一个字符向量。如果希望结果成为一个因素,请添加as.factor = TRUE参数。

# assumes car package installed
income2 <- car::recode(income, "1:2='male';3:4='female'")
income2
## [1] "male"   "male"   "female" "female" "male"   "female" "male"  
© www.soinside.com 2019 - 2024. All rights reserved.