Zwei Eingabedatensätze:R: Wie kann man fehlende Werte effizient mit einem anderen Datensatz füllen?
A
id value
<dbl> <lgl>
1 1 NA
2 2 2
3 3 3
Es erreicht mit folgenden for-Schleife werden kann:
A <- data.frame(id = c(1, 2, 3), value = rep(NA, 3))
A
id value
<dbl> <lgl>
1 1 NA
2 2 NA
3 3 NA
B <- data.frame(id = c(3, 2), value = c(3, 2))
B
id value
1 3 3
2 2 2
Nach dem verfügbaren Wert in B nach A Zugabe, es ist zu erwarten. For-Loop ist jedoch im Allgemeinen sehr langsam. Wie man es effizienter macht?
for(i in 1:nrow(A)){
item <- A[i,]
print(item)
if(is.na(item$value) && (item$id %in% B$id)){
A[i, "value"] <- B[B$id == item$id,]$value
}
}
Join kann dieses Problem lösen. aber eine Regel erforderlich, um den Konflikt zu lösen.
@nrussell, das braucht B, um A. zu überschreiben, zu welcher Art von Join gehört es? – HappyCoding
Linke Verbindung, dann Koaleszenz - 'left_join (A, B, mit = "id")%>% muate (Wert = Koaleszenz (Wert.x, Wert.y))%>% Auswahl (ID, Wert) '. – nrussell
danke. Das ist die Antwort. – HappyCoding