2016-02-21 110 views
-1

我在我的數據集中有多個因子(「a」,「b」,「c」),每個因子都有對應的價格和成本值。R dplyr - 不同因素的總和值

dat <- data.frame(
ProductCode = c("a", "a", "b", "b", "c", "c"), 
Price = c(24, 37, 78, 45, 20, 34), 
Cost = c(10,15,45,25,10,17) 
) 

我正在尋找每個ProductCode的價格和成本的總和。

by.code <- group_by(dat, code) 
by.code <- summarise(by.code, 
         SumPrice = sum(Price), 
         SumCost = sum(Cost)) 

此代碼不起作用,因爲它彙總了列中的所有值,而沒有將它們分類爲類別。

SumPrice SumCost 
1  238  122 

在此先感謝您的幫助。

+0

你可能有plyr函數名稱衝突。用'dplyr :: summarize(...)試試你的代碼' –

回答

1

這不是dplyr - 這個答案是你,如果你不介意的sqldfdata.table包:

sqldf("select ProductCode, sum(Price) as PriceSum, sum(Cost) as CostSum from dat group by ProductCode") 

ProductCode PriceSum CostSum 
     a  61  25 
     b  123  70 
     c  54  27 

使用data.table包:

library(data.table) 
MM<-data.table(dat) 
MM[, list(sum(Price),sum(Cost)), by = ProductCode] 

ProductCode V1 V2 
1:   a 61 25 
2:   b 123 70 
3:   c 54 27 
1

你的代碼工作正常。只有一個錯字。您應該將您的列的ProductionCode命名爲代碼,並且您的代碼正常工作。我只是這樣做了,R正在給出適當的輸出。下面是代碼:

library(dplyr) 
dat <- data.frame(
code = c("a", "a", "b", "b", "c", "c"), 
Price = c(24, 37, 78, 45, 20, 34), 
Cost = c(10,15,45,25,10,17) 
) 
dat 
by.code <- group_by(dat, code) 
by.code <- summarise(by.code, 
         SumPrice = sum(Price), 
         SumCost = sum(Cost)) 
by.code 
+0

謝謝你。我試過這段代碼 - 它仍然不起作用。你確定它給了你適當的輸出嗎? –

+0

此解決方案適用於我。 –

0

我們可以使用aggregatebase R

aggregate(.~ProductCode, dat, sum) 
# ProductCode Price Cost 
#1   a 61 25 
#2   b 123 70 
#3   c 54 27