2016-08-24 77 views
0

,我有以下的數據幀:如何dplyr ::摘要轉換爲dplyr ::做

label target sale 
    low 5000 4000 
    low 11000 9000 
    low 5500 4500 
    low 12000 9500 
middle 20000 18000 
middle 22000 190000 
    high 100000 90000 
    high 120000 95000 

我需要第一組由標籤我的數據幀,然後計算:平均(目標 - 銷售)只對於其中的目標是超過10000行,我嘗試下面的代碼:

library(dplyr) 
avg_increase <- df %>% 
        group_by(labels) %>% 
        summarise(avg_sale_increase = ifelse(target >= 10000,mean(target - sale), 0)) 

,我得到以下錯誤:

Error: expecting a single value

由於summarise只返回單個值,我應該使用deployer::do(或任何其他建議)更改我的代碼來完成任務。

+0

你有沒有想過這樣做的:'DF%>% GROUP_BY(標籤,目標> = 1000)%>% 總結(avg_sale_increase =平均(目標 - 銷售))' 。 這並不直接回答您的問題,但它會爲您提供每個標籤兩行:平均銷售增加超過10K的目標,平均銷售增加的目標低於10K。請考慮使用相對誤差而不是絕對誤差,這對比較各種目標的銷售增長情況非常有用。由於相對錯誤,可能不需要過濾目標。 –

回答

4

問題是與ifelse,它返回一個矢量,如果長度等於輸入的邏輯,所以平均會根據需要被儘可能多的時間來計算。

這應該工作

avg_increase <- df %>% 
       group_by(labels) %>% 
       filter(target >= 10000) %>% 
       summarise(target = mean(target-sale)) 
2

您可以篩選行數> 10000的組合變量。

dat %>% filter(target>10000) %>% 
    group_by(label) %>% mutate(differ = mean(target-sale)) 
+0

Apols,同一時間,相同的答案。 – NJBurgo

+0

完全相同的答案,非常感謝你,因爲@NJBurgo有點快,我選擇它作爲最佳答案。 – sanaz