必要なもの:
次の列を持つ巨大なデータ フレームがあります (さらにいくつかの列がありますが、これらは重要ではありません)。次に例を示します。
user_id video_id group_id x y
1 1 0 0 39 108
2 1 0 0 39 108
3 1 10 0 135 180
4 2 0 0 20 123
もちろん、ユーザー、ビデオ、およびグループ ID は要因です。たとえば、20 本のビデオがありますが、それぞれのビデオには、ユーザーとグループごとにいくつかの「観察」があります。
このデータ フレームを次の形式に変換したいと思います。ここでは、ユーザー ( ) と同じ数の がありx.N
ます。y.N
N
video_id x.1 y.1 x.2 y.2 …
0 39 108 20 123
したがって、 video0
の場合、ユーザー 1 の x 値と y 値は、それぞれ列x.1
とy.1
にあります。ユーザー 2 の値は、列x.2
、y.2
などにあります。
私が試したこと:
x, y
それぞれのすべての観測のみで構成されるデータ フレームのリストを自分で作成しましたvideo_id
。
summaryList = dlply(allData, .(user_id), function(x) unique(x[c("video_id","x","y")]) )
それは次のようになります。
List of 15
$ 1 :'data.frame': 20 obs. of 3 variables:
..$ video_id: Factor w/ 20 levels "0","1","2","3",..: 1 11 8 5 12 9 20 13 7 10 ...
..$ x : int [1:20] 39 135 86 122 28 167 203 433 549 490 ...
..$ y : int [1:20] 108 180 164 103 187 128 185 355 360 368 ...
$ 2 :'data.frame': 20 obs. of 3 variables:
..$ video_id: Factor w/ 20 levels "0","1","2","3",..: 2 14 15 4 20 6 19 3 13 18 ...
..$ x : int [1:20] 128 688 435 218 528 362 299 134 83 417 ...
..$ y : int [1:20] 165 117 135 179 96 328 332 563 623 476 ...
私が立ち往生している場所:
やるべきことは次のとおりです。
summaryList
に基づいて、 の各データ フレームを互いにマージしvideo_id
ます。summaryList[1]$`1`
リスト内の実際のデータ フレームにアクセスする良い方法が見つかりませんsummaryList[2]$`2`
。@ジェームズは部分的な解決策を見つけました:
Reduce(function(x,y) merge(x,y,by="video_id"),summaryList)
列名がユーザー ID の後に名前変更され、そのまま保持されないことを確認してください。現在、 my に
summaryList
はユーザー ID に関する情報が含まれておらず、 の出力には、などのReduce
ように列名が重複x.x y.x x.y y.y x.x y.x
しています。
どうすればこれを行うことができますか?または、現在行っている方法よりも簡単に結果を得る方法はありますか?