2015-10-18 50 views
1

我想根據另一個對象列的標準使用另一個df的百分比來計算data.frame列的百分比值。下面是一些示例數據:R:如何根據列標準和另一個df的百分比值執行(用戶定義的)計算?

df <- data.frame(Value = c(50,10,30,40), 
        object = c("apples","tomatoes", "apples","pears")) 

,並與百分比的對象共享對象:

share <- data.frame(object = c("tomatoes","pears", "apples"), 
        percentage = c(90,75,80)) 

我預期的結果是:

Value object 
1 40 apples 
2  9 tomatoes 
3 24 apples 
4 30 pears 

隨着我用這隻有一個對象代碼,它工作正常:

df[,1] <- df$Value * share$percentage /100 

但是如何對df/share中的不同對象執行此操作? 「聚合」/「子集」或類似的東西?

編輯:到目前爲止我嘗試這樣做,我認爲這可能是一個辦法:

df[,1] <- aggregate(df$Value, by=df$object,FUN= function(x) {x$Value * share$percentage /100} ) 

df[,1] <- apply(split(df, df$object) function(x) {x$Value * share$percentage/100}) 

然而,功能似乎是錯誤的(我」米也不真正與功能:)。 請注意,我不想首先合併dfshare作爲回答,因爲我需要原始結構的df和順序。所以我正在尋找一個簡短的命令。我非常感謝你的想法。謝謝

回答

0

你想加權平均?

library(dplyr) 

df %>% 
    inner_join(share) %>% 
    group_by(object) %>% 
    summarize(weighted_average = 
       sum(Value * percentage)/sum(percentage)) 
+0

這隻會爲每個產品提供一個平均值,而不是原始df(請參閱我的預期結果,df有4個對象,並且只生成df中的三個級別) –