2017-01-12 2 views
1

ich einen Datenrahmen, die als solche aussehen:Ersetzen der NA unter Verwendung von Daten aus mehreren Spalten

ID col2 col3 col4 
1  5 NA NA 
2  NA NA 1 
3  5 NA NA 
4  19 NA 1   

Wenn col2 einen Wert hat, soll diese Zelle nicht ändern (auch wenn Spalten 3 und 4 enthalten Werte). Wenn jedoch col2 einen "NA" -Wert enthält, möchte ich alle Nicht-NAs von col3 oder col4 zurückgeben, falls sie existieren.

Gewünschte Ausgabe unten angezeigt, beachten Sie, wie Zeile 2 hat jetzt die "1".

ID col2 col3 col4 
1  5 NA NA 
2  1 NA 1 
3  5 NA NA 
4  19 NA 1 

Ich weiß, das durch Bezugnahme auf jede Spalte kann manuell erfolgen $ oder [] verwenden, aber wie kann dies mit einer for-Schleife oder anwenden zu tun?

Dank

+0

Angenommen, zu ersetzen, wenn beide col3 und col4 für ein Nonna Wert haben NA-Element in 'col2', was solltest du beachten? – akrun

+0

Große Frage. Beides ist egal! – Workhorse

Antwort

1

Wir können


mit ifelse

df1$col2 <- with(df1, ifelse(is.na(col2), pmax(col3, col4, na.rm = TRUE), col2)) 
df1$col2 
#[1] 5 1 5 19 
tun oder einen logischen Index erstellen, um die Werte

i1 <- is.na(df1$col2) 
df1$col2[i1] <- do.call(pmax, c(df1[i1, 3:4], na.rm = TRUE)) 
+1

Funktioniert! Vielen Dank! – Workhorse

Verwandte Themen