Extracción de los máximos.Hola a todos, trabajé en torno a un script que giraba en torno a los nombres de las columnas y encontraba los que quería usar. Luego encuentra el número de fila y el valor de esa celda. Sin embargo, encuentro que estos valores se repiten para cada columna. ¿Alguien puede indicarme dónde podría estar yendo mal?
Aquí está el guión:
dt = current data table();
col = dt << get column names( string );
nc = N Items( col );
Row = 1;
For( i = 1, i <= nc, i++,
for(r=1, r<=NRow(dt), r++,
Col1 = Column(dt,i);
If( Contains( col[i], "Prediction" ),
If(Column(dt, col[i])[r] > 5 | Column(dt, col[i])[r] > 4.5,
show(col[i]);
val = abs(Col Max( Col1 ));
show(val);
MaxRow = dt << get rows where(as column(Col1)==abs(Col Max( Col1 )));
show(MaxRow);
)
)
)
); <BR /><BR />The log looks like this:<BR /><BR />col[i] = "Prediction B";<BR />val = 6.6;<BR />MaxRow = [6];<BR />col[i] = "Prediction B";<BR />val = 6.6;<BR />MaxRow = [6];<BR />col[i] = "Prediction B";<BR />val = 6.6;<BR />MaxRow = [6];<BR />col[i] = "Prediction C";<BR />val = 5;<BR />MaxRow = [1];<BR />
Re: Extrayendo los máximos.Creo que su lista de ejemplos que proporcionó debería haber sido especificada como
a={ [12], [13], [14],[15,16] };
Su ejemplo había especificado la sintaxis de una matriz [], no una lista {}. Como matriz, tu ejemplo no es válido. Así que responderé asumiendo que lo que tienes es una lista.
La lista que muestra, contiene múltiples matricias. Todo lo que se debe hacer para obtener los datos es especificar correctamente los subíndices para la lista y la matriz. Por ejemplo, si desea extraer el número 13 de su ejemplo, debe especificar
x = a[2][1]
y "x" contendría entonces el valor de 13. Del mismo modo, si desea recuperar el segundo elemento de la cuarta matriz en su lista, [15,16] deberá especificar:
x = a[4][2]
Para tomar todos los primeros elementos de cada una de las matrices y moverlos a una lista simple, todo lo que necesita hacer es recorrer los elementos de su lista llamada "a" y extraer el primer elemento de la matriz.
a = {[12], [13], [14], [15, 16]};
aList = {};
For( i = 1, i <= N Items( a ), i++,
Insert Into( aList, a[i][1] )
);
Show( aList );
y el resultado sería:
aList = {12, 13, 14, 15};
Re: Extrayendo los máximos.No sé por qué, pero tengo una lista que se parece a esto:
a=[ [12], [13], [14],[15,16] ];
¿Cómo puedo simplemente extraer números y agregarlos a una tabla en formato numérico? ¿Esto es como, una lista dentro de una lista? @uday_guntupalli Además, si tengo más de un valor como [15,16] en la lista anterior, solo me gustaría agregar 15 a una tabla de datos. Gracias.
Re: Extrayendo los máximos.Hola @amy ,
¿Qué datos le gustaría guardar en la tabla de datos?
En el script de ejemplo que ha publicado, ColNames [i] se refiere a un valor específico de ColNames que es una lista de todos los nombres de columna. ¿Puede proporcionar una muestra de lo que está contenido en estas columnas.
Lo que estás intentando y el camino en el que te encuentras es correcto. Solo desea asegurarse de que los datos que está pasando a las columnas son correctos. Aquí hay un ejemplo simple:
Names = {"Rick","Tom","Sam"};
Age = [10,20,30];
Weight = [110,130,150];
dt = New Table("Test", Add Rows(N Items(Names)),
New Column("NamesOfStudents",Character,Nominal,<<SET values=""></SET>Re: Extrayendo los máximos.¿Cómo puedo guardar todos estos valores en una tabla? @uday_guntupalli
dt1 = New Table( "Information",
New Column("ColName", character, nominal, values(ColNames[i])),
New Column("MaxVal", numeric, continuous, values(MaxVal)),
New Column( "Column", character, nominal, values (Col))
);Re: Extrayendo los máximos.Ups, lo tengo .. Muchas gracias @uday_guntupalli
Re: Extrayendo los máximos. @amy ,
Creo que el guión está haciendo lo que has borrado. La razón por la que está viendo los valores repetidos es porque en la columna "Predicción B", hay 3 valores, es decir, filas que cumplen con la condición que especificó, por lo que el mismo valor se imprime repetidamente, ya que le pidió que imprima el valor máximo y la posición.
Alternativamente, puedes intentar hacerlo de esta manera.
dt = Current Data Table();
// amy's approach
//col = dt << get column names( string );
//nc = N Items( col );
//Row = 1;
//For( i = 1, i <= nc, i++,
// For( r = 1, r <= N Row( dt ), r++,
// Col1 = Column( dt, i );
// If( Contains( col[i], "Prediction" ),
// If( Column( dt, col[i] )[r] > 5 | Column( dt, col[i] )[r] > 4.5,
// Show( col[i] );
// val = Abs( Col Max( Col1 ) );
// Show( val );
// MaxRow = dt << get rows where( As Column( Col1 ) == Abs( Col Max( Col1 ) ) );
// Show( MaxRow );
//
// )
//
// );
// )
//);
// alternatively
ColNames = dt << get column names( string );
for(i = 1, i <= N Cols(dt), i++,
If( Contains( ColNames[i], "Prediction" ),
Col = Column(dt,i); // get reference to column
MaxVal = Col Max(Col);
ColVals = As List(Col << Get Values);
If(MaxVal > 4.5,
Show(Col);
Show(MaxVal);
Show(Loc(ColVals,MaxVal));
);
);
);