/ / nahradiť riadkové hodnoty podmienené na is.na v inom stĺpci - r, nahradiť, podmienené

nahradiť hodnoty riadkov pod podmienkou is.na v inom stĺpci - r, nahradiť, podmienené

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ď č. 1

Rovnako 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.