Crear iterativamente columnas que contengan todas las permutaciones de resta a partir de una lista inicial de columnasTengo una lista de columnas y necesito crear una nueva serie de columnas con cada permutación de la diferencia entre las columnas enumeradas. La cantidad de columnas en la lista puede variar y el ejemplo no iterativo a continuación cubre 3 columnas (12 a 14).
Current Data Table() << New Column(Head Name( As Namespace( Column( 12 ) ) )||" - "||Head Name( As Namespace( Column( 13 ) ) )||" HSD Threshold Matrix", Numeric, "Continuous", Format("Best", 10), Formula(Col Maximum(If(Contains(:Level, Head Name(As Namespace(Column(13))), 1), As Column(12)), :Group, :Size)));
Current Data Table() << New Column(Head Name( As Namespace( Column( 12 ) ) )||" - "||Head Name( As Namespace( Column( 14 ) ) )||" HSD Threshold Matrix", Numeric, "Continuous", Format("Best", 10), Formula(Col Maximum(If(Contains(:Level, Head Name(As Namespace(Column(14))), 1), As Column(12)), :Group, :Size)));
Current Data Table() << New Column(Head Name( As Namespace( Column( 13 ) ) )||" - "||Head Name( As Namespace( Column( 14 ) ) )||" HSD Threshold Matrix", Numeric, "Continuous", Format("Best", 10), Formula(Col Maximum(If(Contains(:Level, Head Name(As Namespace(Column(14))), 1), As Column(13)), :Group, :Size)));
Automatización y scriptingRe: Crear iterativamente columnas que contengan todas las permutaciones de resta a partir de una lista inicial de columnasPor ejemplo, puede utilizar NChooseK Matrix() para crear las combinaciones (o DoE)
Names Default To Here(1);
mylist = {12, 13, 14};
possible_group_idx = NChooseK Matrix(3,2);
my_groups = Transform Each({idx}, possible_group_idx,
mylist[idx]
);
[12 13, 12 14, 13 14]
Re: Crear iterativamente columnas que contengan todas las permutaciones de resta a partir de una lista inicial de columnasjarmo
Gracias, parece que funcionará. No he tenido tiempo de estudiar los detalles, pero me pregunto si hay algún ejemplo de cómo se puede utilizar.
Re: Crear iterativamente columnas que contengan todas las permutaciones de resta a partir de una lista inicial de columnasRecorre la matriz (o conviértela en una lista de listas) y crea las columnas a medida que lo haces.
Re: Crear iterativamente columnas que contengan todas las permutaciones de resta a partir de una lista inicial de columnasNo estoy seguro de si esto es lo que querías decir, pero encontré algo aquí que funciona. Lo mejor de esto es que no depende de los números de columna.
Names Default to Here(1);
dt = Current Data Table();
//Select X Variable ____________________________________________________________________________________________________________________________________________
cdb = Column Dialog("Add continuous variables you want to plot as X" ,
colxx = ColList( "X", Min Col( 1 ) ),
);
show(cdb);
Eval List(cdb[1::N Items(cdb)-1]);
Summarize(dt, uniqNames = by(colxx[1]));
Show(uniqNames);
Num = NItems(uniqNames);
For( k = 1, k <= N Items( uniqNames ), k++,
// Loop through all columns finding non NA values
For( i = 2, i <= N Items( uniqNames ), i++,
if (i > k, Current Data Table() << New Column(Char(uniqNames[k])||" - "||Char(uniqNames[i])||" Matrix", Numeric, "Continuous", Format("Best", 10), Formula(Col Maximum(If(Contains(:Level, Char(uniqNames[i]), 1), As Column(uniqNames[k])), :Group, :Size)));
)
)
)
;
Resuelto: Obtener valores de columna mediante Loop - Comunidad de usuarios de JMP
Re: Crear iterativamente columnas que contengan todas las permutaciones de resta a partir de una lista inicial de columnasNames Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
mycols = {"OZONE", "CO", "SO2", "NO", "PM10"};
possible_group_idx = NChooseK Matrix(N Items(mycols), 2);
my_groups = Transform Each({idx}, As List(possible_group_idx), Output("List"),
mycols[idx]
);
For Each({cols}, my_groups,
Eval(Substitute(
Expr(dt << New Column(cols[1] ||"_"||cols[2], Numeric, Continuous,
Formula(_col1_ + _col2_)
)),
Expr(_col1_), Name Expr(AsColumn(dt, cols[1])),
Expr(_col2_), Name Expr(AsColumn(dt, cols[2]))
));
);
Write();