¿Cómo puedo unir tablas en función de una columna totalmente coincidente y una coincidencia más cercana?Hola,
Me gustaría unir dos tablas de datos a través de la función 'unir' en JMP. Me gustaría unirme a ellos según el tiempo y el número de reactor. Sin embargo, esto no funciona ya que la columna 'tiempo' tiene 8 decimales en uno de los archivos de datos y el otro cero decimales.
(¿Cómo) sería posible hacer coincidir el tiempo en el punto de coincidencia más cercano y el número de reactor exactamente?
Ya he encontrado algunas discusiones anteriores sobre este problema. Sin embargo, estas soluciones no funcionaron para mí ya que no se pudo hacer coincidir la segunda columna 'número de reactor'.

Aquí hay una captura de pantalla de las dos tablas de datos que me gustaría combinar. La salida debe contener tiempo, reactor, reflectancia y peso seco.
¡Gracias por adelantado!
Tabla de datosRe: ¿Cómo puedo unir tablas en función de una columna que coincida completamente y una que coincida lo más cerca posible?¿Podría proporcionar pequeños conjuntos de datos de ejemplo que tengan varios reactores en ambas tablas de datos (y, en el mejor de los casos, también en la tabla con los resultados correctos)? Esto podría hacerse a mano si no hay demasiados grupos y no hay necesidad de automatización. Tal vez podría usar el complemento fuzzy_merge y usar muchos subconjuntos para administrar los grupos de biorreactores.
También tengo un script (y una herramienta) que debería poder hacer esto, pero Todavía no he tenido tiempo de probarlo completamente , y estoy seguro de que todavía tiene algunos errores leves. La herramienta Unirse a las filas más cercanas debería ser capaz de:
- Unirse basado en la distancia
- Unir mesas hacia atrás, hacia adelante y al más cercano (con opciones opcionales de desempate)
- Permitir agrupación
- Permitir el uso de la tolerancia
- No debería requerir tener tablas de datos ordenadas

Re: ¿Cómo puedo unir tablas en función de una columna que coincida completamente y una que coincida lo más cerca posible?¿Por qué no simplemente hacer una nueva columna que redondee (s) el tiempo para el que tiene 8 dígitos y unirse a eso?
**Editar** No importa.Inmediatamente veo por qué.
Puede obtener un subconjunto de solo el tiempo más cercano haciendo lo siguiente
Names default to here(1);
dt = New Table( "Example",
New Column( "Time",
Set Values( [14.14, 14.28, 13.56, 13.11, 12.32, .] )
)
);
dt << New Column("Rounded Time",
Formula(Round(:Time, 0))
);
// we're just going to for the row that the value for time - rounded time = the min for that value
dt << New Column("Closest",
Formula(
Abs(:Time - :RoundedTime) == ColMin(Abs(:Time - :RoundedTime), :RoundedTime)
)
);
Re: ¿Cómo puedo unir tablas en función de una columna que coincida completamente y una que coincida lo más cerca posible?¡Gracias por su respuesta! Subiré un pequeño ejemplo, sí.
Una vez traté de hacerlo manualmente, pero tomó mucho tiempo ya que hay hasta 24 grupos/reactores y tendrá que desplazarse por muchos puntos de tiempo. ¿Creando subconjuntos? ¿Cómo verías que funciona?
Re: ¿Cómo puedo unir tablas en función de una columna que coincida completamente y una que coincida lo más cerca posible?¿El conjunto de datos de ejemplo que proporcionó tiene valores incorrectos?
Cree una columna de peso seco g/l y cambie el nombre de Tiempo h a tiempo h en datos de reflectancia:

Concatenar los datos de peso seco a eso:

Seleccione el reactor y la columna Tiempo h y Ordene por ellos.
Seleccione el valor faltante en peso seco -> seleccione celdas coincidentes -> invertir selección
Ahora puede saltar alrededor de la tabla para encontrar los valores más cercanos:

En este punto, podría crear algunas fórmulas o scripts de ayuda para calcular el valor más cercano, por ejemplo, algo como esto para reducir aún más los datos:
Names Default To Here(1);
dt = Current Data Table();
r = dt << Get Selected Rows; //selecting of wanted rows could be done in script instead of datatable
r_min = r - 1;
r_max = r + 1;
dt << Subset(rows(Sort List(r||r_min||r_max)), Selected Columns(0));

En este punto, lo más probable es que pueda copiar y pegar los valores de tiempo de peso seco en una nueva columna y crear una fórmula para calcular la fila más cercana.

Esto es lo que devolvería unir las filas más cercanas cuando se usa Unir:

Con Update no creará tantas columnas desordenadas:

La interfaz de usuario de las herramientas parece tener algún problema en la selección de tablas... y el usuario debe asegurarse de que las tablas sean correctas o seleccionadas o la herramienta se unirá automáticamente.