Rellenar las celdas que faltan<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Las tablas de informes a menudo terminan teniendo columnas incompletas donde las etiquetas deben copiarse en las celdas secuenciales a continuación hasta la siguiente etiqueta donde el proceso se repite una y otra vez. El Asistente de importación de Excel tiene una opción para tratar tramos de celdas faltantes que se fusionan. Este script se puede usar después de importar los datos y no requiere que se combinen los tramos de las celdas que faltan.
He estado usando esta secuencia de comandos, o versiones de la misma, durante tanto tiempo que no estoy seguro de dónde provino la esencia.
Re: Completar las celdas que faltan@bayesfactor escribió:
Debo decir que estas son algunas soluciones terriblemente complicadas para lo que debería ser una sola línea:
Estoy de acuerdo en que solo hay una línea de código que el usuario debe escribir en el enlace que proporcionó, sin embargo, la función subyacente no es una sola línea. Esto es cierto para la mayoría de las funciones fáciles de usar en casi cualquier lenguaje de programación, ya sea R, Python, MATLAB, incluso en C/C++, ....
En el complemento de herramientas de tabla de datos (como @Byron_JMP mencionado) encontrará una funcionalidad Span Empty Cells, donde @brady_brady ha creado una función de este tipo que podría usar para hacer lo que quiera con un comando. Aunque la herramienta puso la selección de la tabla y las columnas y todas las configuraciones en una interfaz. Entonces, si desea hacerlo de manera diferente, deberá modificar el código fuente de la función para que tome las columnas seleccionadas y acepte una entrada separada que especifique la forma de dividir las celdas.
En caso de que quiera tener una función JSL para hacer esto para poder incorporarlo en otros scripts, sería una buena idea poner esta solicitud tanto para support@jmp.com y el Lista de deseos de JMP.
La otra forma es construir sobre la función con script de Brady y modificar la rutina para que se use como una función JSL en un script JSL.
Re: Completar las celdas que faltanobtener este complemento (gratis)
Complemento de herramientas de tabla de datos

casi seguro de que la herramienta de división de celdas vacías hará lo que está buscando.
Re: Completar las celdas que faltanTengo un caso en el que quiero completar valores de varias columnas hacia adelante y hacia atrás dentro de fragmentos de la tabla en función de una columna de etiqueta. Después de toda esta discusión, no creo que haya una forma elegante de hacerlo. Por favor, corríjame si me equivoco.
Debo decir que estas son algunas soluciones terriblemente complicadas para lo que debería ser una sola línea:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.fillna.html
Re: Completar las celdas que faltanHola,
Aunque podría haber una versión más elegante, estas dos opciones deberían funcionar.
Se adjunta una tabla de datos que incluye un script tavble que hace lo que quiere (creo). Además, hay una columna con una fórmula que usa la instrucción Match que hace lo mismo. El guión que usé es
Names Default to Here(1);
dt = Current Data Table();
For(i = 1, i <= N Rows(dt), i++,
n = dt << get rows where(:Parameter == "def");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "jkl");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "mno");
Column("Value")[n] = "NA";
n = dt << get rows where(:Parameter == "d");
Column("Value")[n] = "NA";
);
Mejor,
Martín
Re: Completar las celdas que faltanTodavía atascado en este punto sin saber cómo continuar.
¡Cualquier entrada apreciada!
Gracias
Re: Completar las celdas que faltan¡Gracias por la respuesta!
Estoy tratando de escribir un script para esto. El problema aquí es que podría tener muchas más columnas en blanco. Pero solo necesito verificar los valores para estas 4 columnas y completar con "NA".
Gracias
Re: Completar las celdas que faltan¿Quieres un script para hacer esto? Interactivo, puede usar recodificar y guardar una columna de fórmula, este script de fórmula se puede usar para hacer lo que quiera
otra forma es usar una nueva columna de fórmula y en el editor de fórmulas puede usar la declaración condicional if y verificar si falta y establecer el valor en na
entonces podría usar ctrl+f para buscar y reemplazar.
Hay muchas opciones entre las que puede elegir. Me gusta bastante la recodificación. En las secuencias de comandos, probablemente usaría otra forma: guarde la columna en una matriz o lista como desee, use valores no numéricos "na", que cambiarán los valores a caracteres, cambiarán los valores faltantes a na y luego escribirán de nuevo los valores en el valores de columna. Espero que una de estas ideas te ayude más
Re: Completar las celdas que faltanTengo una tabla de datos con 2 columnas. Debe comprobar si el Valor está en blanco para def, jkl, mno y stu y rellenar "NA" para estas entradas.
Cualquier ayuda es apreciada.
| Parámetro | Valor |
| a B C | 5 |
| definitivamente | |
| hola | 22 |
| jkl | |
| mno | |
| pqr | 3 |
| estudiante | |
| vwx | 73 |
| yz | 99 |
Re: Completar las celdas que faltanOtra actualización:
En lugar de usar este script, eche un vistazo a esta colección de herramientas: https://community.jmp.com/t5/JMP-Add-Ins/Data-Table-Tools-Add-in/ta-p/28582
Este complemento tiene una mejor versión del script anterior y mucho más.
Salud,
Byron
Re: Completar las celdas que faltanUn problema similar, pero un poco diferente, es el caso en el que desea una cierta cantidad de celdas antes la entrada real tenga el mismo valor. Allí debe hacer ajustes para no sobrescribir las celdas anteriores, por ejemplo, 4 en caso de que falte una entrada. Se adjunta una secuencia de comandos y una captura de pantalla de la tabla de datos antes y después de ejecutar la secuencia de comandos. En este script solo cubrí el caso numérico.
Names Default To Here( 1 );
// Get Current Data Table
dt = Current Data Table();
// Get Column Names from selection box (where you want to fill)
dtcollist = dt << get column names;
dlg = Dialog(
"Select Column",
vlist( selection = List Box( dtcollist ), button( "OK" ) )
);
Remove From( dlg, 2 );
Eval List( dlg );
// Get matrix of values in selected columns
dtMat = (dt << Get All Columns As Matrix);
// For loop to loop through all selected columns
For( i = 1, i <= N Items( selection ), i++,
// get i-th selected column
colNum = Contains( dtColList, Name Expr( selection[i] ) );
// get values as matrix
vMat = dtMat[0, colNum];
// get rows where matrix is non-empty
mis = Loc( vMat );
// If there is non-missing value loop through previous rows
If( N Row( mis ),
// Get i-th Column name
col = Column( selection[i] );
/*
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
*/
// Loop to fill previous 4 rows from the row with the k-th non-missing value
For( k = 1, k <= N Rows(mis), k++,
For( j = If(mis[k]-4 < 1, 1,mis[k]-4), j < mis[k], j++,
If(Is Missing(col[j]), col[j] = col[mis[k]],col[j])
);
);
);
);
Data Table before and after applying the scriptData Table before and after applying the scriptTabla de datos antes y después de aplicar el script
Re: Completar las celdas que faltanEstoy actualizando este complemento con este script. Gracias a Brady Brady por algunos ajustes que hacen que esto funcione más rápido en mesas realmente grandes. En una tabla de filas de 5 mm con algo para completar cada 10 000 filas, se tarda entre 10 y 15 segundos.
Names Default To Here( 1 );
dt = Current Data Table();
dtcollist = dt << get column names;
dlg = Dialog( "Select Column", vlist( selection = List Box( dtcollist ), button( "OK" ) ) );
Remove From( dlg, 2 );
Eval List( dlg );
dtMat = (dt << Get All Columns As Matrix);
For( i = 1, i <= N Items( selection ), i++,
colNum = Contains( dtColList, Name Expr( selection[i] ) );
vMat = dtMat[0, colNum];
mis = Loc( Is Missing( vMat ) );
If( N Row( mis ),
col = column(selection[i]);
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
For( j = if(mis[1]==1, 2, 1), j <= N Row( mis ), j++,
col[mis[j]] = col[mis[j] - 1]
);
);
);
Re: Completar las celdas que faltanConvertir el script en un complemento o ponerlo en una opción de menú es mi muleta para olvidar las fórmulas para que esto suceda,
Esta es otra fórmula fácil para hacer esto.
:Complete es la nueva columna donde vive la fórmula.
:Missing es la columna de origen a la que le faltan filas.
//Filas con caracter
Si( :Falta == "",
:Completa[Fila() - 1, Vacío()],
:Desaparecido)
//Filas con Números
Si( Falta( :Falta ) == 1,
:Completar [Fila() - 1, Vacío()],
:Desaparecido)
Re: Completar las celdas que faltanMe pregunto si se podría hacer esto sin Expresiones. Para una sola columna "MyCol1" podría hacer algo. como esto:
Por cada fila ( Si ( Está perdido ( MiCol1 ) , : MiCol1 = Retraso ( MiCol1 , 1 ) ) ) ;
El uso de un enfoque automatizado para seleccionar las columnas como lo hace combinado con esto debería poder hacerlo.