行と列の取り出し | package入門(ユーティリティー編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | package入門 | ポテンシャルを飛躍的に高めるrpnパッケージを学習。

HOME > 講座 > package入門 > ユーティリティー編 > 行と列の取り出し hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

行と列の取り出し

 本講座の冒頭で4つのデータ形式について示しました(再掲します)。

  A) 1行1列   B) m行1列   C) 1行n列           D) m行n列
  1           1           1 2 3 4 5 6 7 8 9   1 2 3 4 5 6 7 8 9
              2                               2 9 6 2 3 5 8 0 6
  |           3 ---> data2.txt    |           3 7 6 6 1 3 2 9 4
  v           4                   v           4 4 8 4 6 2 7 8 2
  data1.txt   5               data3.txt       5 0 5 5 8 4 7 7 6
              6                               6 5 1 4 8 3 5 9 5
              7               data4.txt <---  7 3 7 2 5 0 9 6 1
              8                               8 9 4 1 3 4 3 6 4
              9                               9 3 1 7 7 3 1 0 3


rpnが得意な形式はB形式でしたが、今までの説明はC形式とB形式の相互変換でした。では、D形式はどうすればいいでしょうか。Dの形式を計算するには3つの方法があります。

  1. Dの形式から特定の1行を取り出して計算する。
  2. Dの形式から特定の1列を取り出して計算する。
  3. Dの形式のまま計算する。

3つの方法とも、カンタン分析パッケージであれば、row, rows, col, colsなどのrpnプログラムで難なくできるのですが、基本に立ち返ってそれらを使わずに行と列を取り出してみましょう。

列データの取り出し

 まず、列の取り出しです。例として4列目を取り出すことにしましょう。data4.txtにDのデータ形式が入っていますので、以下のrpn式で取り出すことができます。

  >rpn #9 #8 #7 #6 #5 #4 #3 #2 #1 @4 <data4.txt
  4
  2
  6
  4
  5
  4
  2
  1
  7


うまく取り出せましたね。一旦、#1から#9までで9個の数値を記憶して、改めて@4で4列目のデータを取り出しています。注意点は列データの数値を記憶する順番が9から1へと逆順になることです(rpnが逆ポーランド電卓なので)。

行データの取り出し

 次は4行目を取り出してみましょう。rpnでは行の取り出しはちょっと面倒で、いったん縦横を変換して、同じように4列目を取り出して、再度縦横変換します。具体的に示したほうが分かりやすいですね。

  >rpn -c tmat <data4.txt | rpn #9 #8 #7 #6 #5 #4 #3 #2 #1 @4 | rpn -c tmat
  4 4 8 4 6 2 7 8 2


具体的な例で列と行データを取り出してみましょう。以下は2005年の黒点数データですが、1月から3月までを1行目に、そのあと続いて3ヶ月ごとに区切ってデータが格納されています。格納されているファイルはdata5.txtとします。

  31 29 24
  24 42 39
  40 36 21
   8 18 41


この行列データの3月、6月、9月、12月のデータを取り出してみましょう。つまり、3列目のデータになるので、一旦、#1から#3まで数値を記憶してから、@3で3列目のデータを取り出します。以下がそのrpn式になります。

  >rpn #3 #2 #1 @3 <data5.txt
  24
  39
  21
  41


きちんと3列目が取り出されています。では、次に4月から6月のデータを抜き出してみましょう。一度、縦横変換してから2列目を取り出して、再度変換しています。

  >rpn -c tmat <data5.txt | rpn #4 #3 #2 #1 @2 | rpn -c tmat
  24 42 39


うまく取り出せていますね。100列目とか100行目といったとても大きな行列数でない限りこの方法で行と列データを取り出すことができます。

広報行列データからの行と列の取り出しは、カンタン分析パッケージを利用したほうがはるかに簡単です。100行目、100列目など大きな行列数も問題ありませんし、一行、一列以外にも複数行、複数列などに対応しています。興味があればかんたんデータ分析講座を参照ください。

情報本講座で使用したプログラムは、ユーティリティーパッケージとして購入することができます。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

ユーティリティーパッケージ

ユーティリティー

マイスター

カレンダー

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS」を参照ください。

注意rpnの障害情報と対策はこちら