Usando ifelse () para reemplazar NAs en un marco de datos haciendo referencia a otro marco de datos de diferente longitud
Ya revisé las siguientes dos publicaciones y creo quepodría Respondo mi pregunta, aunque me cuesta ver cómo:
1)Reemplazo condicional de valores en un data.frame 2)Crear una función para reemplazar NAs de un data.frame con valores de otro
Dicho esto, estoy tratando de reemplazar los NA en un marco de datos haciendo referencia a otro marco de datos de una longitud diferente (más corta) y obteniendo valores de reemplazo de la columna "B" donde coinciden los valores de la columna "A" en cada marco de datos .
Modifiqué los datos, a continuación, por simplicidad e ilustración, aunque el concepto es el mismo en los datos reales. Para su información, en el segundo marco de datos real, tampoco hay duplicados en la columna "A".
Aquí está el primer marco de datos (df1):
> df1
B C A
1 NA 2012-10-01 0
2 NA 2012-10-01 5
3 4 2012-10-01 10
4 NA 2012-10-01 15
5 NA 2012-10-01 20
6 20 2012-10-01 25
7 NA 2012-10-01 0
8 NA 2012-10-01 5
9 5 2012-10-01 10
10 5 2012-10-01 15
> str(df1)
'data.frame': 10 obs. of 3 variables:
$ B: num NA NA 4 NA NA 20 NA NA 5 5
$ C: Factor w/ 1 level "2012-10-01": 1 1 1 1 1 1 1 1 1 1
$ A: num 0 5 10 15 20 25 0 5 10 15
Y el segundo marco de datos (df2).
> df2
A B
1 0 1.7169811
2 5 0.3396226
3 10 0.1320755
4 15 0.1509434
5 20 0.0754717
6 25 2.0943396
> str(df2)
'data.frame': 6 obs. of 2 variables:
$ A: int 0 5 10 15 20 25
$ B: num 1.717 0.3396 0.1321 0.1509 0.0755 ...
Creo que estoy bastante cerca con el siguiente código:
> ifelse(is.na(df1$B) == TRUE, df2$B[df2$A == df1$A], df1$B)
[1] 1.7169811 0.3396226 4.0000000 0.1509434 0.0754717 20.0000000 NA NA
[9] 5.0000000 5.0000000
Warning message:
In df2$A == df1$A :
longer object length is not a multiple of shorter object length
Obviamente, quiero que los elementos de salida 7 y 8 sean 1.7169811 y 0.3396226, en lugar de NA. . .
Gracias de antemano por cualquier ayuda y, una vez más, ¡gracias por su paciencia!