Tengo 2 marcos de datos y me gustaría usar el segundo para actualizar el primero. Sin embargo, el problema es que el segundo marco de datos consta de todas las entradas pero con diferentes cantidades de datos (como se muestra a continuación)

DF1                     DF2                   DF3
 X    Y                X    Y                X   Y
 1    A                1    B                1   B
 2    <NA>             2    B                2   B
 3    <NA>             3    C         -->    3   C
 4    D                4    <NA>             4   D
 5    E                5    <NA>             5   E

Debería ser una consulta de actualización simple donde las entradas en DF1 se actualizan si DF2 no es NA

Primero pensé en eliminar NA de la lista

DF2sub <- subset(DF2,!is.na(Y)
DF3 <- transform(DF1, Y = DF2sub$Y[match(X,DF2sub$X)])

Pero el código resultante hace lo siguiente

DF3
X    Y
X    Y    
 1    B
 2    B
 3    C
 4    <NA>
 5    <NA>
0
Hojo.Timberwolf 18 oct. 2019 a las 07:29

1 respuesta

La mejor respuesta

Puede utilizar directamente la función which para obtener los índices de los valores NA y no NA y mapearlos juntos. como esto.

DF3 <- rbind(DF2[which(!is.na(DF2$Y)),],DF1[which(is.na(DF2$Y)),])

Espero que esto resuelva tu problema.

0
Ashish 18 oct. 2019 a las 05:03