2012-07-04 2 views
2

У меня есть набор данных, где проверка данных показывает некоторые из следующих, все из которых должны быть отсутствующийКодирование Отсутствие данных в R

'missing' 
'unknown' 
'uncoded' 

Я правильно думать, что я могу просто заменить все вхождения этих с «НС»? Это предпочтительный способ сделать это?

var[var=='missing'] <- NA 
var[var=='unknown'] <- NA 
var[var=='uncoded'] <- NA 
+0

«Предпочтительный» способ, скорее всего, зависит от анализа, который вы пытаетесь сделайте, и вы получите много мнений. Возможно, перефразирование вопроса на что-то вроде «Как может R представлять недостающие данные» может помочь. Однако ответ на этот вопрос, вероятно, уже существует. – BenBarnes

+0

Спасибо, но я думал, что отсутствующие данные всегда представляются как NA? Я всегда просто разбирался с данными, которые уже были закодированы как NA, но на этот раз у меня есть другие кодировки. –

+0

А, я не знал, ссылаетесь ли вы на предпочтительный способ перекодирования или на предпочтительный способ устранения недостающих значений. Если вы уверены, что хотите скомпоновать их как «NA», вы также можете рассмотреть «NA_character_',' NA_integer_' и т. Д. (Перечисленные под '?" NA "') – BenBarnes

ответ

6

Что вы показываете это возможно, но вы можете упростить код для одного вызова делает сравнение с помощью бинарного оператора %in% , Вот пример использования фиктивных данных:

set.seed(1) 
var <- factor(sample(c("missing","unknown","uncoded", 1:4), 100, replace = TRUE)) 

Это дает нам фактор вектор вроде этого:

> head(var) 
[1] unknown uncoded 2  4  unknown 4  
Levels: 1 2 3 4 missing uncoded unknown 
> table(var) 
var 
     1  2  3  4 missing uncoded unknown 
    14  15  17  13  10  18  13 

Чтобы установить все эти значения закодированных как любой из c("missing","unknown","uncoded") в NA, мы делаем это в одиночный выстрел:

var2 <- var ## copy for demo purposes, but you can over write if you wish 
var2[var2 %in% c("missing","unknown","uncoded")] <- NA 

который дает

> var2[var2 %in% c("missing","unknown","uncoded")] <- NA 
> head(var2) 
[1] <NA> <NA> 2 4 <NA> 4 
Levels: 1 2 3 4 missing uncoded unknown 
> table(var2) 
var2 
     1  2  3  4 missing uncoded unknown 
    14  15  17  13  0  0  0 

Обратите внимание, что исходные уровни сохранены. Если вы хотите, чтобы удалить эти уровни, то мы можем применить droplevels() функция var2:

var2 <- droplevels(var2) 

который дает

> head(var2) 
[1] <NA> <NA> 2 4 <NA> 4 
Levels: 1 2 3 4 
> table(var2) 
var2 
1 2 3 4 
14 15 17 13 

отметить также, что по умолчанию NA не отображаются в табличной выходе, но мы исправьте это, чтобы показать вам, что они все еще существуют:

> table(var2, useNA = "ifany") 
var2 
    1 2 3 4 <NA> 
    14 15 17 13 41 
+0

Спасибо. Это отличный ответ! ! +1 –

4

Общая идея заменить их NA правильной.

Вы можете использовать recode, если вы хотите сделать это в одной строке:

library(car) 
var <- recode(var, "c('missing','unknown','uncoded')=NA")