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 № 1Jak 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
.