No tengo idea de cómo expresar mi problema al convertir un dataframe a otro, por favor lee a continuación para más detalles. Muchas gracias.
Quiero convertir un dataframe (izquierda) en otro (derecha), pero no tengo idea de cómo hacer esta tarea. En resumen, se conservó el valor más cercano en A
y se fusionó con B
. Por favor, tómate tu tiempo para ayudarme. ¡Muchas gracias!
Aquí está la data original.
df1 = data.frame(
ID = c(1,1,1,1,1,1,1,1,2,2,2,2,2),
TIME = c(-2, -1, 0, 11, 13, 24, 28, 36, -3, 0, 12, 13, 24),
A = c(30, 50, NA, 80, NA, NA, 30, NA, 20, NA, NA, 80, NA),
B = c(NA, NA, 2.0, NA, 2.5, 2.5, NA, 1.0, NA, 1.0, 1.0, NA, 2.5)
)
davy.ai
Para obtener el resultado deseado, puede utilizar el siguiente enfoque:
Primero, agrupe el dataframe original por la columna
ID
utilizando la funcióngroup_by()
del paquetedplyr
.A continuación, utilice la función
tidyr::fill()
para rellenar hacia adelante los valores en la columnaA
.Luego, utilice la función
dplyr::mutate()
para calcular la distancia entre el valor actual deTIME
y el valor anterior utilizando la funciónlag()
. Luego, calcule la distancia entre el valor actual deTIME
y el siguiente valor utilizando la funciónlead()
. Finalmente, utilice la funciónpmin()
para obtener la distancia mínima entre el valor actual deTIME
y sus valores vecinos.Por último, utilice la función
dplyr::filter()
para filtrar las filas donde la columnaA
tiene valores perdidos.Aquí está el código:
El dataframe resultante
df2
tendrá el resultado deseado como se muestra en el lado derecho de la imagen.