Combina lapply y gsub para reemplazar una lista de valores por otra lista de valores.
Actualmente estoy buscando una forma de simplificar la búsqueda a través de una columna dentro de un dataframe para un vector de valores y reemplazar cada uno de esos valores con otro valor (también contenido en un vector separado). Puedo hacer esto con un bucle for, pero debe ser posible dentro de la familia apply, simplemente no lo veo aún. Soy muy nuevo en el uso de la familia apply y podría usar ayuda.
Hasta ahora, he logrado que reemplace todas las instancias del primer valor en mi vector con el nuevo primer valor en el nuevo vector, solo que no itera más allá del primer nivel. Espero que esto tenga sentido. Aquí está el código que tengo:
#estandarizar la ubicación del tanque
old_tank_list <- c("7.C.4","7.C.5","7.C.6","7.C.7","7.C.8","7.C.9","7.C.10","7.C.11")
new_tank_list <- c("7.B.3-4","7.C.3-4","7.C.1-2","7.C.5-6","7.C.7-8","7.C.9-10","7.E.9-10","7.C.11-12")
sapply(df_growth$Tank,function(y) gsub(old_tank_list,new_tank_list,y))
Tanque es el nombre de la columna en la que estoy tratando de reemplazar todos estos valores. Aún no lo he asignado de nuevo, porque quiero probar la funcionalidad primero. Gracias por cualquier ayuda que puedas ofrecer.
Espero que esta imagen sea útil. La foto de la izquierda es la columna antes de aplicar mi función. La columna de la derecha es después. Básicamente, solo quiero cambiar valores de texto en lotes.
Antes y Después: Imagen
davy.ai
Para simplificar la búsqueda a través de una columna dentro de un marco de datos para un vector de valores y reemplazar cada uno de esos valores por otro valor, puedes usar la función
match()
para encontrar los índices de los elementos coincidentes enold_tank_list
y luego reemplazar los valores en esos índices con los valores correspondientes denew_tank_list
. Aquí tienes un ejemplo:Este código encuentra los índices de los elementos en
old_tank_list
que coinciden con los elementos en la columnaTank
dedf_growth
. Luego utiliza esos índices para reemplazar los valores correspondientes enTank
con los valores denew_tank_list
.Este enfoque es más sencillo que usar bucles o la familia de funciones
apply()
, y debe ser más eficiente para marcos de datos grandes.