Неуказанные уровни в факторе ()
Я работаю с набором данных в R, который поставляется с кодовой книгой, которая в основном говорит мне, какими должны быть метки для разных уровней моих факторных переменных. Например, в кодовой книге я вижу, что в моей переменной "Sex" 0 - это "Female", а 1 - "Male". Я использую эту информацию для обозначения значений в моих переменных соответственно.
Однако недавно, к моему ужасу, я обнаружил, что кодовая книга не полная. Например, он говорит мне для одной переменной, что 1 - "Да", а 2 - "Нет", но не говорит мне, что такое 7, 8 и 9, что я вижу в данных. Я хотел бы пометить эту переменную следующим образом (или что-то вроде этого):
data$variable <- factor(data$variable,
levels=c(1, 2, 7, 8, 9),
labels=c("Yes", "No", "7", "8", "9"))
По сути, я хотел бы, чтобы все уровни, которые не были указаны в кодовой книге, были помечены как сами по себе. Проблема, с которой я сталкиваюсь, заключается в том, что в этой кодовой книге отсутствует довольно много из них, и мне бы действительно не пришлось вручную просматривать все неопределенные значения в моих данных, чтобы создать приведенный выше код для любой переменной. Плюс, если я просто пропущу эти недостающие уровни, R автоматически помечает их как "NA", что мне не нужно.
Резюме: я пытаюсь выяснить, как использовать factor() таким образом, чтобы вместо обозначения всех неопределенных уровней как "NA" он обозначал их как самих себя.
1 ответ
Вы можете конвертировать уровни после создания коэффициента, чтобы мы могли использовать его в своих интересах.
mydat <- c(1, 2, 3,2,3,4,3,2,1,2,4,4,6,5,7,8,9)
# convert to factor ignoring code book
dat <- factor(mydat)
# Create map corresponding to codebook levels
mymap <- c("1" = "Yes", "2" = "No")
# Figure out which levels are accounted for by codebook
id <- levels(dat) %in% names(mymap)
# Convert to appropriate values
levels(dat)[id] <- mymap[levels(dat)[id]]
В качестве альтернативы (и, возможно, немного проще)
# alternatively we can construct the map if we have two vectors
# of the value and the codebook value
val <- c(1, 2)
lev <- c("Yes", "No")
dat <- factor(mydat)
levels(dat)[val] <- lev