/ / replace wartości wierszy uwarunkowane na is.na w innej kolumnie - r, replace, warunkowe

zamień wartości wierszy warunkowo na is.na w innej kolumnie - r, zamień, warunkowo

Prosty logiczny problem zamiany; Mam ramkę danych, taką jak:

mydf <- expand.grid(var1 = c("type1", "type2"), var2 = c(7, 6, "NA"), var3 = 9)

Chciałbym zastąpić wartości w var3 wartościami w var2, chyba że var2 to NA. Tak powstały nowy var3 powinien wynosić 7,7,6,6, NA, NA. Próbując to osiągnąć, zauważam to

mydf$var3[mydf$var2 == 7] <- 5

poprawnie identyfikuje wiersze 1 i 2 mydf jako wymagające wymiany i pozostawia cztery ostatnie wiersze w spokoju, więc otrzymuję var3 = 5,5,9,9,9,9. Jednak jeśli spróbuję

    mydf$var3[!is.na(mydf$var2)] <- 5

Dostaję var3 = 5,5,5,5,5,5. Dlaczego więc nie pominął dwóch ostatnich wierszy, gdzie var2 to NA? Kolejny problem polega na tym, że nie wiem, jak uzyskać wartości zastępujące var2 zamiast stałej. Kiedy próbuję

mydf$var3[!is.na(mydf$var2)] <- mydf$var2

Dostaję var3 = 1,1,2,2,3,3. Którego w ogóle nie rozumiem.

Odpowiedzi:

0 dla odpowiedzi № 1

Jak w komentarzach, string "NA" nie jest NA wartość. Więc is.na("NA") jest FALSE i wszystkie wiersze są zaznaczone. Po prostu wymień "NA" w twojej definicji z 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)]

Zauważ, że nie możesz po prostu zamienić lewej strony na just mydf$var2 ponieważ mają teraz nierówne długości - wcześniej nie było tego błędu, ponieważ nic nie było NA.