データ削減

ワークシート列の削除や、選択したデータを平均してデータの数を少なくする操作のためのサンプルです。

  1. 削除
    1. 列の削除
  2. 平均
    1. 行の統計ですべてのシートのデータを平均
    2. 選択したシートのデータを平均
    3. Xを補間してすべてのシートのXYYデータを平均

削除

列の削除

名前またはインデックスで列を削除できます。

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]$;

その他のスクリプトサンプル

 

page_top_icon