Hola,
Tengo el siguiente script donde abro dos tablas de datos que necesito procesar antes de usarlas para el análisis. Uno de los conjuntos de datos requiere la transposición de la columna 3 (: Inóculo ...) al final de la columna 16 de la tabla (Prueba de fugas de control positivo) como se muestra a continuación. Sin embargo, me gustaría hacer que la ejecución sea automática ya que los nombres son irrelevantes pero la estructura de la tabla es siempre la misma. ¿Alguien podría proporcionar algunos comentarios sobre cómo hacer que funcione? Gracias
dt1 = Open(
"C:\Users\ioliveira\Desktop\data\DEF-BMP Curves.csv",
columns(
New Column( "Sample", Character, "Nominal" ),
New Column( "Hour", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Average", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Minimum", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "Maximum", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
dt2 = Open(
"C:\Users\ioliveira\Desktop\data\DM for BMP 31.07.18.xlsx",
Worksheets( "Protocol" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 3 ),
Data Starts on Row( 4 ),
Data Starts on Column( 1 ),
Data Ends on Row( 6 ),
Data Ends on Column( 16 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
dt2 << Transpose(
columns(
:Inoculum,
:Positive Control,
:Name( "FB Powder 2/5 1.05.18" ),
:Economizer WEL 6.7 bar 15.05.18,
:Chicken muck black REL 08.05.18,
:Chicken muck white REL 08.05.18,
:Name( "Rye Ag-Bag EEL" ),
:M301,
:M302,
:M303,
:Name( "WEL ECON 24/7" ),
:Name( "WEL STRAW 24/7" ),
:Name( "WEL STRAW 20/6" ),
:Name( "Positive Control Leak-Test" )
),
Label( :Sample name ),
Output Table( "dt3" )
);
Gracias por los comentarios.
He intentado usar los diferentes ejemplos, pero con la excepción del tercer script que hace la distribución de la tabla de datos, no hay diferencia al ejecutar el script uno y el segundo. ¿Es correcto? Pensé que la secuencia de comandos eliminaría las columnas 1 y 2, pero parece que esto no se muestra.
¿Son los nombres de las columnas los que son irrelevantes o los nombres de las tablas?
Puede obtener una lista de los nombres de las columnas en su tabla con la función Obtener nombres de columnas().
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
Show( n );
Creo que encontrará listas útiles para lo que está tratando de escribir.
Podemos usar Remove() en la lista, n, para deshacernos de 2 columnas a partir de la columna 1. Para darnos la lista, m, de columnas que deseamos utilizar.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
m = Remove( n, 1, 2 );
Show( m );
Ahora podemos usar esta lista de columnas. Como un ejemplo simple, trazaremos las distribuciones de las columnas.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Column Names();
m = Remove( n, 1, 2 );
dt << Distribution( Y( Eval( m ) ));
Tenga en cuenta que necesitamos usar la función Eval() para evaluar el argumento para que Distribution() reconozca m como una lista de nombres de columna.
Debería poder usar el mismo enfoque para definir las columnas que necesita transponer, si eso es lo que necesitaba hacer.
Espero que eso ayude.
phil
Creo que esta es la solución que necesitas.
colList = dt2 << get column names;
colList = remove( colList, 1,3);
dt3 = dt2 << Transpose(
columns(
eval(colList)
),
Label( :Sample name ),
Output Table( "dt3" )
);