2016-04-24 53 views
1

我沒有確切的想法,根據選定行中列的累積和,從數據框中分離行和來自另一列的值的平均值。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

例如,如何拉2臺4行,每行作爲如61 單位平均單獨的數據幀和重量累積和在800到1100的範圍內。 選擇到新數據框的行也應從主df中刪除。

實際工作數據框 - enter link description here 我試圖用最接近前面指定的標準的最好方法從數據框中拉行。 (累計重量範圍在800至1100之間,選擇的PotOG平均值爲400(400至420之間)

步驟 1)識別3-4行(大約選擇的重量範圍800和1100) 2)識別PotOG的平均值(來自加權平均值) 3)識別400到420之間的PotOG範圍。 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

中沒有快速簡便的方法,現在我已經編輯了我的問題以包含我正在處理的原始數據框。我會試試這個。 –

相關問題