处理 R 重新编码中缺少的系统?

Dealing with system missing in R recode?

我正在从 SPSS 过渡到 R,我想知道您如何处理系统缺失...

例如,如果我想将以下 SPSS 代码重写到 R 中:

RECODE income (1 THRU 6 = copy) (else = SYSMIS) INTO income2

我可以重新编写以下代码:

income_2018$income2 <- dplyr::recode(income_2018$income, '1' = 1L, '2' = 2L, '3' = 3L, '4' = 4L, '5' 
= 5L, '6' = 6L)

如何处理系统缺失(SPSS 代码中的 'else' 语句)?

谢谢!

您可以添加 .default 参数,它将重新编码所有未明确命名的值:

dplyr::recode(income_2018$income, '1' = 1L, '2' = 2L, '3' = 3L, '4' = 4L, '5' 
= 5L, '6' = 6L, .default = NA_integer_)

如果您将数字转换为 integer/numeric,这应该会自动进行。

income_2018$income <- as.integer(income_2018$income)
#Or to change it to numeric
#income_2018$income <- as.numeric(income_2018$income)

在将非数字转换为整数之前将它们转换为 NA 时,它将 return 发出警告。

x <- c('1', '2', '4', '6', 'a')
as.integer(x)
#[1]  1  2  4  6 NA

Warning message: NAs introduced by coercion


正如@H 1 所评论的那样,这些会将所有数字转换为其等效的数字。如果我们只对 1 到 6 之间的数字感兴趣,我们可以这样做。

income_2018$income[income_2018$income > 6 | income_2018$income < 1] <- NA