私は R に比較的慣れていないので、経験豊富なユーザーほど明確にベクトル空間で考えることはありません。次のようにフォーマットされたデータフレームがあります。
metric timestamp value tag1 tag2 tag3 tag4 tag5 tag6 tag7 tag8 tag9 tag10
1 dummy.random.unif 1367848802 0.9936670064926147 host=localhost blah=foo NA NA NA NA NA NA NA NA
2 dummy.random.unif 1367848822 0.19621700048446655 host=localhost blah=bar NA NA NA NA NA NA NA NA
3 dummy.linear 1367848842 97.6 shmoo=whatever NA NA NA NA NA NA NA NA NA
4 dummy.random.unif 1367848862 0.3171229958534241 host=localhost blah=foo NA NA NA NA NA NA NA NA
5 dummy.linear 1367848882 97.7 shmoo=whatever NA NA NA NA NA NA NA NA NA
6 dummy.random.unif 1367848902 0.2197140008211136 host=localhost blah=foo NA NA NA NA NA NA NA NA
ご覧のとおり、列tag1:tag10
にはキーと値のペアが含まれています。ただし、常に同じキーではなく、常に同じ数のキーでもありません。このデータ フレームを、消費しやすいように、次のようなものに変換したいと考えています。
metric timestamp value tag.host tag.blah tag.shmoo
1 dummy.random.unif 1367848802 0.9936670064926147 localhost foo NA
2 dummy.random.unif 1367848822 0.19621700048446655 localhost bar NA
3 dummy.linear 1367848842 97.6 NA NA whatever
4 dummy.random.unif 1367848862 0.3171229958534241 localhost foo NA
5 dummy.linear 1367848882 97.7 NA NA whatever
6 dummy.random.unif 1367848902 0.2197140008211136 localhost foo whatever
手続き的にこれを行うことができることはわかっていますが、それは扱いにくいです。R を使用する正しい方法は、(ループするのではなく) ベクトル全体の操作について考えると聞いたことがあります。do.call
、daply
、などの正しい順列を見つけようとして数時間を費やしましたが、strsplit
どこにも行きません。
この問題を解決するためのクリーンで R っぽい方法は何ですか?