| 行取得 | 
|---|
| テーブルから1行取得したい | 
| 先頭から5行を取得したい | 
| 先頭から xx % を取得したい | 
| 数値の条件を満たす行を取得したい | 
| 文字列の条件を満たす行を取得したい | 
| 特定の行を取得したい | 
| キー列で値の重複を排除したい | 
| 全列の組み合わせで重複行を排除したい | 
| 列並び替 | 列並び替 | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 列を並び替えたい(index) | 
  | 
  |||||||||||||||||||||||
| 列を並び替えたい(列名) | 
  | 
  |||||||||||||||||||||||
| 列を逆順に並び替えたい | 
  | 
  |||||||||||||||||||||||
| ある列を左端と入れ替えたい(index) | 
  | 
  |||||||||||||||||||||||
| ある列を右端と入れ替えたい(index) | 
  | 
  |||||||||||||||||||||||
| ある列を左端と入れ替えたい(列名) | 
  | 
  |||||||||||||||||||||||
| ある列を右端と入れ替えたい(列名) | 
  | 
  
| 列置換 | 列置換 | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ある列 を 他の列 と置き換えたい | 
  | 
  
| 列名変更 | サンプル | 
|---|---|
| 全列の列名変更 | 
result("C1","C2","C3") = table;
 | 
  
| 特定の列の列名変更 | 
result("C1","CC2","C3") = table("C1","C2","C3");
 | 
  
| テーブル結合 | サンプル | 
|---|---|
| テーブル結合(最大行に合わせて補完) | 
defRow = cbind(-1,""); // 補間用レコード
defRow2 = cbind(-1,-1); // 補間用レコード
if (nrow(table) < nrow(table2)) {
  table = rbind(table,defRow);
} else if (nrow(table) > nrow(table2)) {
  table2 = rbind(table2,defRow2);
}
result = cbind(table,table2);
 | 
  
| テーブル結合(最小行に合わせて切詰) | 
if (nrow(table) < nrow(table2)) {
  table2 = sel(row={1:nrow(table)},table2);
} else if (nrow(table) > nrow(table2)) {
  table = sel(row={1:nrow(table2)},table);
}
result = cbind(table,table2);
 | 
  
| テーブル結合(キーで結合) | key = 1; key2 = 1; result = merge(table, table2, "00", key, key2);  | 
  
| テーブル結合(列別、下端追加) | 
key1 = 1;
key2 = 1;
defRow1(titles(table1)) = cbind(-1,"",""); // 補間用レコード
defRow2(titles(table2)) = cbind(-1,""); // 補間用レコード
defRow1_ = defRow1(sel(not row=key1,{1:ncol(defRow1)}));
defRow2_ = defRow2(sel(not row=key2,{1:ncol(defRow2)}));
table1_ = cbind(table1, rep(defRow2_,ncol(table1)));
idxList2 = sel(not row=key2,{1:ncol(table2)});
table2_ = cbind(table2(key2),rep(defRow1_,ncol(table2)),table2(idxList2));
result = rbind(table1_, table2_);
 | 
  
| テーブル分割 | サンプル | 
|---|---|
| 行毎に、6:4 に前後に分ける | 
ratio = 0.6;
nr = as.integer(nrow(table)*ratio);
keycol = {1:nr};
result = sel(row=keycol, table);
result2 = sel(not row=keycol, table);
 | 
  
| 行毎に、6:4 にランダムに分ける | 
ratio = 0.6;
ijudge = as.integer(nrow(table)*ratio);
ctemp = shuffle({1:nrow(table)});
result = sel(ctemp(1) <= ijudge, table);
result2 = sel(ctemp(1) > ijudge, table);
 | 
  
| キー列を基準に、6:4 に前後に分ける | 
ratio = 0.6;
keyColName = "C1";
keyCol = remove_dup(table(keyColName), keyColName);
nr = as.integer(nrow(keyCol) * ratio);
keyColBefore = sel(row={1:nr}, keyCol);
result = sel(belong(table(keyColName), keyColBefore), table);
result2 = sel(not belong(table(keyColName), keyColBefore), table);
 | 
  
| キー列を基準に、6:4 にランダムに分ける | 
keyColName = "C1";
ratio = 0.6;
c1uniq("C1") = remove_dup(table(keyColName), keyColName);
c2rate("C2") = shuffle({1:nrow(c1uniq)});
tableJudge = cbind(c1uniq, c2rate);
ijudge = as.integer(nrow(tableJudge)*ratio);
mergeTable = merge(table, tableJudge, "00", keyColName, "C1");
ic=ncol(mergeTable);
result = sel(mergeTable(ic) <= ijudge, table);
result2 = sel(mergeTable(ic) > ijudge, table);
 | 
  
| テーブル差分 | サンプル | 
|---|---|
| 単一のキー列同士によるテーブル差分 | key1 = "C2"; key2 = "CC2"; result = sel(not belong(table1(key1), table2(key2)), table1); result2 = sel(not belong(table2(key2), table1(key1)), table2);  | 
  
| 全列をキーとしたテーブル差分 | keyList1 = titles(table1); keyList2 = titles(table2); uniqKey1 = paste(table1(keyList1),sep=","); uniqKey2 = paste(table2(keyList2),sep=","); result = sel(not belong(uniqKey1, uniqKey2), table1); result2 = sel(not belong(uniqKey2, uniqKey1), table2);  |