ddply とサブセットについて質問があります。
次のようなデータフレーム df があります。
df <- read.table(textConnection(
" id v_idn v_seed v_time v_pop v_rank v_perco
1 15 125648 0 150 1 15
2 17 125648 0 120 2 5
3 18 125648 0 100 3 6
4 52 125648 0 25 4 1
5 17 125648 10 220 1 5
6 15 125648 10 160 2 15
7 18 125648 10 110 3 6
8 52 125648 10 50 4 1
9 56 -11152 0 250 1 17
10 15 -11152 0 180 2 15
11 18 -11152 0 110 3 6
12 22 -11152 0 5 4 14
13 56 -11152 10 250 1 17
14 15 -11152 10 180 2 15
15 22 -11152 10 125 3 14
16 18 -11152 10 120 4 6 "), header=TRUE)
第一歩 :
次のような cut_interval を使用した等間隔のリストがあります。
myinterval <- cut_interval(c(15,5,6,1,17,14), length=10)
だから私はここに2つのレベルがあります: [0,10) と (10,20]
ステップ2 :
各グループ/クラスを v_cut の 2 つのレベルで定義したい ... 次のように:
id v_idn v_seed v_time v_pop v_rank v_perco v_cut
1 15 125648 0 150 1 15 (10,20]
2 17 125648 0 120 2 5 [0,10)
3 18 125648 0 100 3 6 [0,10)
4 52 125648 0 25 4 1 [0,10)
5 17 125648 10 220 1 5 [0,10)
6 15 125648 10 160 2 15 (10,20]
7 18 125648 10 110 3 6 [0,10)
8 52 125648 10 50 4 1 [0,10)
9 56 -11152 0 250 1 17 (10,20]
10 15 -11152 0 180 2 15 (10,20]
11 18 -11152 0 110 3 6 [0,10)
12 22 -11152 0 5 4 14 (10,20]
13 56 -11152 10 250 1 17 (10,20]
14 15 -11152 10 180 2 15 (10,20]
15 22 -11152 10 125 3 14 (10,20]
16 18 -11152 10 120 4 6 [0,10)
ステップ 3 :
各グループv_cutのx軸のv_rankとy軸の時間の変動性を知りたいので、次のような方法でv_rank値のmin、mean、max、sdを計算する必要があります
ddply(df, .(v_cut,v_time), summarize ,mean = mean(v_rank), min = min(v_rank), max = max(v_rank), sd = sd(v_rank))
*求める結果 : *
id v_time MEAN.v_rank ... v_cut
1 0 2.25 (10,20]
2 0 2.42 [0,10)
3 10 2.25 [0,10)
4 10 2.42 (10,20]
私の問題
ステップ 1 -> ステップ 2 を通過する方法がわかりません:/
そして、ステップ 3 の例のように v_cut でグループ化できる場合は?
ddply の「サブセット」オプションで同じことを行う可能性はありますか?
もう一度、偉大な R グルの助けに感謝します !
更新 1:
step1 から step2 に進むための答えがあります。
df$v_cut <- cut_interval(df$v_perco,n=10)
私はplyrを使用していますが、この場合、おそらくより良い答えがありますか?
ステップ 2 からステップ 3 に進むには、答えてください。
更新 2:
Brandon Bertelsen は、melt + cast で良い答えをくれましたが、(理解するために) plyr と ddply で同じ操作を行いたいのですが、結果は異なります:
id v_idn v_time MEAN.v_rank ... v_cut
1 15 0 2.25 (10,20]
2 15 10 2.45 (10,20]
2 17 0 1.52 [0,10)
2 17 10 2.42 [0,10)
etc.
私はこのようなものを試しています:
r('sumData <- ddply(df, .(v_idn,v_time), summarize,min = min(v_rank),mean = mean(v_rank), max = max(v_rank), sd=sd(v_rank))')
しかし、sumData データフレームに v_cut を入れたいのですが、どうすれば ddply を使用できますか? これを作るオプションはありますか?または、最初の df と key = v_idn をマージして v_cut 列を sumData に追加するのが唯一の良い答えですか?