我正在从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.
感谢任何指针,我认为我很困惑。
干杯。
请有趣地看看一个名为recode的函数。
library(dplyr)
char_vec <- sample(c("a", "b", "c"), 10, replace = TRUE)
recode(char_vec, a = "Apple")
为简单起见,您可以使用if_else()
功能替换/重新编码R中的数据。
if_else(condition, true_result, false_result)
检查条件是否满足,它返回true_result,否则返回false_result。
例如,x= 3
和if_else(x>2,"yes","no)
将返回输出:
“是”
因此,在您的情况下,您可以使用以下内容:
if_else(sex==1,"Male","Female")
if_else(income==(1 | 2),1,2)
在这种情况下,您可以仅将数据的sex
列和income
列放在上述函数中以对其进行重新编码。
与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)
假设您有一个数字向量,其中包含集合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"