Es ist immer hilfreich, sich an die ursprünglichen Designprinzipien hinter Faktoren zu erinnern. Sie waren für kategoriale Variablen gedacht, die einen festen Wert annahmen. So vorstellen, änderte ich dein Beispiel leicht zu sein:
d <- data.frame(color = c("red", "blue", NA, NA, "green", "green"),
amount = c("high","low","low","mid","mid","high"))
> d
color amount
1 red high
2 blue low
3 <NA> low
4 <NA> mid
5 green mid
6 green high
Jetzt völlig macht es Sinn, dass R beschwert sich, wenn wir laufen die folgenden:
> d$color[is.na(d$color)] <- d$amount[is.na(d$color)]
Warning message:
In `[<-.factor`(`*tmp*`, is.na(d$color), value = c(3L, 1L, NA, NA, :
invalid factor level, NA generated
denn warum sollten wir jemals eine color
von „high“ wollen oder "Mitte"? Das macht keinen Sinn. Das mentale Modell hier ist, dass entweder zwei Faktoren wirklich nichts miteinander zu tun haben, oder wenn sie es tun, sollten ihre Ebenen die gleichen sein. So
levels(d$color) <- c(levels(d$color),"low","mid")
d$color[is.na(d$color)] <- d$amount[is.na(d$color)]
dies läuft ohne Probleme:
> d
color amount
1 red high
2 blue low
3 low low
4 mid mid
5 green mid
6 green high
auch wenn das Ergebnis semantisch unsinnig ist.
Natürlich, viele Menschen finden das alles Faktor Niveau Jonglieren irksome und hätte einfach gemacht:
d <- data.frame(color = c("red", "blue", NA, NA, "green", "green"),
amount = c("high","low","low","mid","mid","high"),
stringsAsFactors = FALSE)
und dann wird R nicht, was Sie mit bei allen NA
Werten füllen, weil sie aren‘ t Faktoren mehr.
Vielen Dank @rawr für die Beantwortung meiner Frage. Ich habe versucht, "ungültiges Faktorniveau zu googeln", aber ich habe ehrlich gesagt nicht verstanden, was passiert ist. Vielleicht sollte ich ins Bett gehen. –
@ HaddE.Nuff, danke. Das ist super hilfreich! –