cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Have your say in shaping JMP's future by participating in the new JMP Wish List Prioritization Survey
Expand Vector Column
Jeff_Perkinson
Community Manager Community Manager

11608_Parallels DesktopScreenSnapz001.png

The Expand Vector Column add-in will convert an expression column containing a vector into a set of columns containing the elements of the vector.

11634_PagesScreenSnapz001.png

The TestVec.jmp data table can be used for demonstration.

Add-in courtesy john.sall

Comments
hogi

very helpful

cool trick:
+0 to use the index to access the values inside the vector - instead of the respective row.

why sum()?

suggestions for improvements in a future version of the addIn:
- at the moment, the code works well if the vectors in all cells have the same length - and none of them is empty().
-> by encapsulating the formula with Try() one could make it even work without complaints for cells with variable vector length.

- maybe: first find the longest vector and then use this length to determine the number of columns to add.

The source code for the add-in is open. Feel free to enhance it and post your own version back to the File Exchange. 

I'm sure the Community would appreciate your additions.

hogi
// expandVector.jsl
// With this script,the user selects column containing vectors of arbitrary length,and the 
// script creates a set of columns with the elements of the vector.
// Test Table:
// New Table( "TestVec",Add Rows(5),New Column("A",Expression,Vector,Set Values({[1,2,3,4,5],[5,4,3,2,1],Empty(),[2,1]})));

Names Default To Here( 1 );
dt = Current Data Table(); If( Is Empty( dt ), throw() );

names = dt << Get Selected Columns;
if(not(nitems(names)),Caption("no column selected"); throw());
Caption("expanding "|| Char(nitems(names))||" vector column(s) ...");
wait(0);
for each ({col}, names,
if ((col<<GetDataType)!="Expression",continue());
colName = col << get name();


nDim = col maximum(Try(Nitems(col),.));

for(i=1,i<=nDim,i++,
	Eval(EvalExpr(NewColumn(Expr(colName||"["||Char(i)||"]"),Numeric,Formula(Try(Sum(Subscript(Expr(Name Expr(col))+0,Expr(i))))))));
);
dt << run formulas();
);
Caption(remove)




Recommended Articles