Работа с системой отсутствует в R перекодировать? - PullRequest
3 голосов
/ 25 марта 2020

Я делаю скачок от 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)

Как мне работать с системными пропусками (оператор else в коде SPSS)?

Спасибо !

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Вы можете добавить аргумент .default, который перекодирует все значения с явно не указанными именами:

dplyr::recode(income_2018$income, '1' = 1L, '2' = 2L, '3' = 3L, '4' = 4L, '5' 
= 5L, '6' = 6L, .default = NA_integer_)
0 голосов
/ 25 марта 2020

Если вы преобразуете числа в целое число / число c, это должно работать автоматически.

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

Будет возвращено предупреждение при преобразовании нецифровых чисел в целые, прежде чем превратить их в NA.

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

Предупреждающее сообщение: NA введены по принуждению


Как прокомментировано @H 1, они превратят все числа в их числа c эквивалентные. Если нас интересуют только цифры от 1 до 6, мы можем это сделать.

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