Два входных наборов данных:R: как эффективно заполнить недостающее значение другим набором данных?
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
После добавления по доступной стоимости в B к A, ожидается, иметь:
A
id value
<dbl> <lgl>
1 1 NA
2 2 2
3 3 3
Это может быть достигнуто с последующим цикл. Однако for-loop в целом очень медленный. Как сделать это более эффективно?
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 может решить эту проблему. но требуя правила для разрешения конфликта.
@nrussell, для этого требуется B для перезаписывания A., к какому типу соединения принадлежит это? – HappyCoding
Левое соединение затем объединяется - 'left_join (A, B, by = "id")%>% mutate (значение = coalesce (значение.x, значение.y))%>% select (id, value) '. – nrussell
спасибо. это ответ. – HappyCoding