2016-04-24 5 views
1

選択した行の列の累積合計に基づいて行をデータフレームから分離する方法はありません。別の列の値の平均。 ユニット 61として平均と量の累積和と別個のデータフレームとして4行毎の2セットをプルする方法例えばdplyr - 列の値の累積合計と他の列の値の平均を使用してデータフレームから行を区切ります

  ID Weight Units 
16-1791-9731 299 50 
16-1791-9732 301 72 
16-1791-9730 301 34 
16-1787-9720 296 78 
16-1787-9719 297 98 
16-1787-9717 300 98 
16-1787-9718 301 98 
16-1782-9700 297 74 
16-1782-9699 299 74 
16-1782-9703 301 104 
16-1782-9702 303 140 
16-1785-9710 298 77 
16-1785-9708 298 77 
16-1785-9711 299 200 
16-1785-9709 300 200 
16-1265-7695 299 72 

Image of dataframe

サンプルデータフレーム新しいデータフレームに選択された行も、マスターdfから削除する必要があります。

実際の作業データフレーム - enter link description here データフレームから、前述の基準に近い最良の方法で行を引き出そうとしています。 (800から1100の範囲の累積合計と400から420の間の選択されたPotOGの平均)

の手順1)3-4行を特定するには800と1100) 2)Potogの平均値(加重平均から) 3)Potogの範囲を400と420の間で指定します。 0120-919-0が有効です。4)最適なフィッティング行が新しいデータフレームへクラスタとして引き出されます。 5)さらなるリクエストのためにプロセスを繰り返す

dplyrでこれを達成するための提案はありますか?

+0

Rに入力できる形式で入力と期待される出力を投稿できます。これは簡単に役立ちます。 – Gopala

+0

それはアルゴリズムの質問のように聞こえます。私はdplyrでそれを行うための迅速かつ簡単な方法はないと思う。 – Hao

答えて

0

予想される出力が表示されておらず、基準と入力データが、説明されている条件を満たすゼロのケースを提供しているため、しかし、ここで私が思いつく問題の一つのアプローチがあります。

# Get all possible combinations of four rows 
combn_df <- as.data.frame(t(combn(1:nrow(df), 4, sort))) 

# Test each combination of four rows for both conditions 
combn_df$weightsInRange <- apply(combn_df, 1, function(x) between(sum(df$Weight[x]), 800, 1100)) 
combn_df$unitsMean61 <- apply(combn_df, 1, function(x) mean(df$Units[x[1:4]]) == 61) 

# Select combinations of rows that meet both conditions 
combn_df <- combn_df[combn_df$weightsInRange & combn_df$unitsMean61, ] 

# Extract two sets of four rows from original DF into two separate data frames 
apply(combn_df[1:2, ], 1, function(x) df[x[1:4], ]) 
+0

私は今私が取り組んでいる元のデータフレームを含むように私の質問を編集しました。私はこれを試してみましょう。 –

関連する問題