データ削減
ワークシート列の削除や、選択したデータを平均してデータの数を少なくする操作のためのサンプルです。
削除
列の削除
名前またはインデックスで列を削除できます。
del col("Sample 6"); // ロングネームを使う del col(G); // ショートネームを使う del col(7); // 列インデックス(最初の列は1)を使う NextCol = 7; // 変数を使う del wcol(NextCol);
平均
行の統計ですべてのシートのデータを平均
以下のコードはXファンクションrowStatsを使用してワークブック内の全てのシートにある列を平均し、新しいブックに結果を出力します。
string ss$ = %H; // アクティブブック名を保存 int ncols = wks.ncols; // アクティブシートの列の数を保存 newbook s:=3; // 結果用のブック(シート数3) // 各シートの名前付け 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); }
選択したシートのデータを平均
以下のコードは、XファンクションrowStatsを使って、選択されたすべてのシートの各列を平均し、結果を同じブックのMean, N, SDという3つのシートに出力します。2列以上持つ3つ以上のワークシート(列の数は同じ)があるワークブックを用意してコードを実行します。Ctrlキーを押しながらシート名をクリックして2つ以上のシートを選択します。
int ncols=wks.ncols;// アクティブシートの列数を保存 // 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;
Xを補間してすべてのシートのXYYデータを平均
以下のコードでは、Xファンクションaverageを使用してすべてのシートのXYYデータの平均を計算して結果を新しいシートに出力します。ブック内のすべてのシートは、最初の列がXで、全シートの列数と列名が共通であるなど、同じ形式のデータである必要があります。X値の数は同じである必要はありません。
// データファイルの場所を指定 string path$ = system.path.program$ + "Samples\Import and Export\"; // ワイルドカードを使用してすべてのファイルを探す findfiles ext:="S*-*-*.dat"; int numFiles = fname.GetNumTokens(CRLF); // 新しいブックを開始 newbook; // 全てのファイルでループしてブック内の新しいシートにインポート for(int ifile = 1; ifile <= numFiles; ifile++) { string filepath$, file$; // 次のファイル名を取得 filepath$=fname.gettoken(ifile,CRLF)$; // 新しいシートを追加してインポート impasc fname:=filepath$ options.ImpMode:= 4; } // すべてのシートで平均する // シートの数を取得 int nlayers = page.nlayers; // X取得 range rXIn = col(1); // Y列の数を取得 - 全てのシートで共通 int ncols = wks.ncols - 1; // 新しい出力シートを追加 newsheet name:="Average"; // 全てのデータ列でループして平均を計算 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); // 最初のシートのY列のロングネームと単位を取得して出力Y列に割り当て range rYIn = 1!wcol(icol+1); col($(icol+1))[L]$ = rYIn[L]$; col($(icol+1))[U]$ = rYIn[U]$; } // X列のロングネームと単位を取得して出力X列に割り当て col(1)[L]$ = rXIn[L]$; col(1)[U]$ = rXIn[U]$;
その他のスクリプトサンプル