4.1.2 Data Reduction
Contents
Deleting
Delete Columns
You can delete columns by name or index:
del col("Sample 6"); // By Long Name del col(G); // By Short Name del col(7); // By column index (counting from 1) NextCol = 7; // By variable index del wcol(NextCol);
Averaging
Average Data from All Sheets with Row Statistics
The following code will use the rowStats X-Function to average each column in a workbook across of all the sheets and put the results into a new book. Start with a workbook with two or more worksheets each containing two or more columns of data (same number of columns in each).
string ss$ = %H; // Save active book name. int ncols = wks.ncols; // Save number of columns of active sheet. newbook s:=3; // New book for Results, with 3 sheets. // Name each sheet: range s1=1!;s1.name$ = Mean; range s2=2!;s2.name$ = N; range s3=3!;s3.name$ = SD; loop(i,1,ncols) { rowstats [ss$](1:end)!wcol(i) mean:=1!wcol(i) n:=2!wcol(i) sd:=3!wcol(i); }
Data Average over Selected Sheets
The following code will use the rowStats X-Function to average each column in a workbook across of all the Selected sheets and put the results into 3 sheets named Mean, N, SD in the same book. Start with a workbook with three or more worksheets each containing two or more columns of data (same number of columns in each). Select two or more sheets by holding the Ctrl key and clicking the sheet names.
int ncols=wks.ncols;//save number of columns of active sheet // get selected sheets like 3,4,6 string sel$=SelLayers()$; if(exist([%H]Mean!,2)==0) { newsheet name:="Mean"; newsheet name:="N"; newsheet name:="SD"; } type "selected sheets %(sel$)"; loop(i,1,ncols) { rowstats (%(sel$))!wcol(i) mean:=Mean!wcol(i) n:=N!wcol(i) sd:=SD!wcol(i); } page.active$=Mean;
Average XYY Data from All Sheets with Interpolation of X
The following code will use the average X-Function to average the common XYY pairs in all of the sheets and put the
results into a new sheet. All of the sheets in the book should be of similar data; i.e. first column is X values and
each sheet has the same number of columns and the same column names, etc.. Each sheet does not have to have the same
number of X values as linear interpolation will occur.
// Point to where the data files are string path$ = system.path.program$ + "Samples\Import and Export\"; // Find all files with wild card findfiles ext:="S*-*-*.dat"; int numFiles = fname.GetNumTokens(CRLF); // Start a new book newbook; // Loop over all files and import each as a new sheet in the book for(int ifile = 1; ifile <= numFiles; ifile++) { string filepath$, file$; // Get next file name filepath$=fname.gettoken(ifile,CRLF)$; // Import by adding new sheet impasc fname:=filepath$ options.ImpMode:= 4; } //Average all sheets // Get number of layers int nlayers = page.nlayers; // Get X range rXIn = col(1); // Get number of Y cols - same in all sheets int ncols = wks.ncols - 1; // Add a new output sheet newsheet name:="Average"; // Loop over all data cols and do averaging for(int icol = 1; icol<=ncols; icol++) { averagexy iy:=(1:$(nlayers))!(1,$(icol + 1)) method:=1 interp:=1 x:=col(1) y:=wcol(icol+1); // Get long name and units of data Y col in first sheet and assign to output Y col range rYIn = 1!wcol(icol+1); col($(icol+1))[L]$ = rYIn[L]$; col($(icol+1))[U]$ = rYIn[U]$; } // Get long name and units of data X col and assign to output x col col(1)[L]$ = rXIn[L]$; col(1)[U]$ = rXIn[U]$;