Określ różne typy brakujących wartości (NA)

Jestem zainteresowany określeniem typów brakujących wartości. Mam dane, które mają różne typy braków i próbuję zakodować te wartości jako brakujące w R, ale szukam rozwiązania, w którym wciąż mogę je rozróżnić.

Powiedz, że mam jakieś dane, które wyglądają tak,

set.seed(667) 
df <- data.frame(a = sample(c("Don't know/Not sure","Unknown","Refused","Blue", "Red", "Green"),  20, rep=TRUE), b = sample(c(1, 2, 3, 77, 88, 99),  10, rep=TRUE), f = round(rnorm(n=10, mean=.90, sd=.08), digits = 2), g = sample(c("C","M","Y","K"),  10, rep=TRUE) ); df
#                      a  b    f g
# 1              Unknown  2 0.78 M
# 2              Refused  2 0.87 M
# 3                  Red 77 0.82 Y
# 4                  Red 99 0.78 Y
# 5                Green 77 0.97 M
# 6                Green  3 0.99 K
# 7                  Red  3 0.99 Y
# 8                Green 88 0.84 C
# 9              Unknown 99 1.08 M
# 10             Refused 99 0.81 C
# 11                Blue  2 0.78 M
# 12               Green  2 0.87 M
# 13                Blue 77 0.82 Y
# 14 Don't know/Not sure 99 0.78 Y
# 15             Unknown 77 0.97 M
# 16             Refused  3 0.99 K
# 17                Blue  3 0.99 Y
# 18               Green 88 0.84 C
# 19             Refused 99 1.08 M
# 20                 Red 99 0.81 C

Jeśli teraz zrobię dwie tabele moje brakujące wartości ("Don't know/Not sure","Unknown","Refused" i77, 88, 99) są uwzględniane jako zwykłe dane,

table(df$a,df$g)
#                     C K M Y
# Blue                0 0 1 2
# Don't know/Not sure 0 0 0 1
# Green               2 1 2 0
# Red                 1 0 0 3
# Refused             1 1 2 0
# Unknown             0 0 3 0

i

table(df$b,df$g)
#    C K M Y
# 2  0 0 4 0
# 3  0 2 0 2
# 77 0 0 2 2
# 88 2 0 0 0
# 99 2 0 2 2

Teraz recoduję trzy poziomy czynników"Don't know/Not sure","Unknown","Refused" w<NA>

is.na(df[,c("a")]) <- df[,c("a")]=="Don't know/Not sure"|df[,c("a")]=="Unknown"|df[,c("a")]=="Refused"

i usuń puste poziomy

df$a <- factor(df$a) 

to samo dotyczy wartości liczbowych77, 88, i99

is.na(df) <- df=="77"|df=="88"|df=="99"

table(df$a, df$g, useNA = "always")       
#       C K M Y <NA>
# Blue  0 0 1 2    0
# Green 2 1 2 0    0
# Red   1 0 0 3    0
# <NA>  1 1 5 1    0

table(df$b,df$g, useNA = "always")
#      C K M Y <NA>
# 2    0 0 4 0    0
# 3    0 2 0 2    0
# <NA> 4 0 4 4    0

Teraz brakujące kategorie są przekodowywaneNA ale wszystkie są skupione razem. Czy istnieje sposób, aby przekodować coś jako brakujące, ale zachowaćoryginalny wartości? Chcę, żeby R nawijało"Don't know/Not sure","Unknown","Refused" i77, 88, 99 jako brakujący, ale chcę móc nadal mieć informacje w zmiennej.

questionAnswers(3)

yourAnswerToTheQuestion