次の 2 つのデータ フレームがあるとします。
big.table <- data.frame("idx" = 1:100)
small.table <- data.frame("idx" = sample(1:100, 10), "color" = sample(colors(),10))
次のようにそれらをマージしたい:
merge(small.table, big.table, by = "idx", all.y=TRUE)
idx color
1 1 <NA>
2 2 <NA>
3 3 salmon2
4 4 <NA>
5 5 <NA>
6 6 <NA>
...
20 20 <NA>
21 21 <NA>
22 22 blue4
23 23 grey99
24 24 <NA>
25 25 <NA>
26 26 <NA>
...
ここで、テーブルの下の「色」列に値を入力して、すべての NA がテーブルの前にある値に設定されるようにする必要があります。
注: この問題は、標準のログ形式ではなく、コンピュータ プログラムから生成されたログ ファイルに関係しています。このログ ファイルの行のブロックは、ブロックの最初の行で識別される「プロセス」に属します。ログ ファイルの関連する行から情報を取り出しました。そのほとんどはプロセスに属し、その情報 (行番号、タイム スタンプなど) を含むデータ テーブルを作成しました。ここで、行番号を持つ small.table の各行に対応する「プロセス」名をこのテーブルに入力する必要があります。
big.table の上部の行には「プロセス」(上の例では色) がない場合があります。これらの行は NA のままにする必要があります。
最初の「プロセス」が開始されると、そのプロセス開始行と次のプロセス開始行の間のすべての行が最初のプロセスに属します。2 番目のプロセスが開始されると、そのプロセス開始行と次のプロセス開始行の間のすべての行が 2 番目のプロセスに属します。等々。プロセス行は、ログ ファイル データ フレームに収集した他の行と同じ行番号になることはありません。
私の計画は、すべてのログ行番号のシーケンスになるように big.table を作成し、それに小さなテーブルをマージすることです。次に、プロセス名を「入力」し、大きなテーブルをログ ファイルにマージして、すべてが結合されたログ ファイルのみを保持します。
私は他のアプローチに対してオープンです。