Jednoduchý problém s logickým nahradením; Mám dátový rámec ako:
mydf <- expand.grid(var1 = c("type1", "type2"), var2 = c(7, 6, "NA"), var3 = 9)
Chcel by som nahradiť hodnoty vo var3 hodnotami vo var2, pokiaľ var2 nie je NA. Výsledná nová var3 by teda mala byť 7,7,6,6, NA, NA. Pri pokuse o to som si všimol
mydf$var3[mydf$var2 == 7] <- 5
správne identifikuje riadky 1 a 2 súboru mydf ako potreby výmeny a ponecháva posledné štyri riadky osamote, takže dostanem var3 = 5,5,9,9,9,9. Ak sa však pokúsim
mydf$var3[!is.na(mydf$var2)] <- 5
Dostanem var3 = 5,5,5,5,5,5. Prečo teda nepreskočil posledné dva riadky, kde var2 bol NA? Ďalším problémom je, že neviem, ako dosiahnuť, aby náhradné hodnoty boli var2 namiesto konštanty. Keď sa snažím
mydf$var3[!is.na(mydf$var2)] <- mydf$var2
Dostanem var3 = 1,1,2,2,3,3. Čomu vôbec nerozumiem.
odpovede:
0 pre odpoveď č. 1Rovnako ako v komentároch, reťazec "NA"
nie je NA
hodnota. tak is.na("NA")
je FALSE
a všetky riadky sú vybraté. Stačí vymeniť "NA"
vo vašej definícii s NA
.
mydf <- expand.grid(var1 = c("type1", "type2"), var2 = c(7, 6, NA), var3 = 9)
mydf$var3[!is.na(mydf$var2)] <- mydf$var2[!is.na(mydf$var2)]
Upozorňujeme, že ľavú stranu nemôžete vymeniť iba za mydf$var2
pretože majú rozdielnu dĺžku - predtým ste nemali túto chybu, pretože nič nebolo NA
.