2016-01-17 158 views
0

我有一個重複的任務來計算每個國家產品的平均價格。價格和國家代碼(例如,ES =西班牙,TR =土耳其)位於我的數據框的兩個不同列中。我如何使用for-loop遍歷不同的國家?每組的平均值

# get price for ES only 
ES = subset(training.data.raw$priceusd, training.data.raw$destinationcountry== "ES") 
# sum all prices of ES 
summyES = sum(ES) 
# Freq of ES 
FES = 5223 
# avg price of ES 
(avgES = summy/FES) 

# AVG price for TR 
TR = subset(training.data.raw$priceusd, training.data.raw$destinationcountry=="TR") 
summyTR = sum(TR) 
FTR = 3201 
avgTR = summy/FTR 
print(avgTR) 
+0

我已經檢查了循環和其他命令,但我根本無法應用它在這裏,或者我應用它錯了,這就是爲什麼我不得不在這裏發佈這個問題 –

+0

@michael Gruenstaeudl,謝謝! –

回答

1

您有拆分應用組合問題。嘗試是這樣的:

aggregate(priceusd ~ destinationcountry, data = training.data.raw, FUN = mean) 

舉個例子,從重複性的數據:

> aggregate(Sepal.Length ~ Species, data = iris, FUN = mean) 
    Species Sepal.Length 
1  setosa  5.006 
2 versicolor  5.936 
3 virginica  6.588 

有幾十種方法可以做到這一點,利用基礎R功能,以及添加的包。搜索「拆分應用組合」應該引導你到所有的人。

+0

完美!正是我正在尋找的!非常感謝 我想問你一個問題,所以我基本上是說當我做的時候(「priceusd〜destinationcountry)」得到每個目標國家的價格? –

+0

我還想問你,當我運行你寫的代碼,它完美的工作,並顯示60個結果「60個國家」,但我想只有10個結果出這60個,這是可能的嗎? –

+0

@FadiGilbertChar將你的數據分配給這些國家:'聚合(priceusd〜destinationcountry,data = training.data.raw [training.data.raw $ destinationcountry%in%c(「ES」,「TR」),],FUN =意思)' – Thomas

0

您可以使用dplyr來執行此操作。

library(dplyr) 

training.data.raw    %>% 
    group_by(destinationcountry) %>% 
    summary(avg = mean(priceusd))  # Avg computed for each group in destinationcountry 

這將計算每組的平均值。

+0

我試過了,但它說錯誤:找不到函數「%>%」 –

+0

我錯過了'庫(dplyr)'語句,我剛剛添加它。如果這樣不能解決問題,那麼你可能需要更新'dplyr'或安裝並使用'magrittr'軟件包。 – steveb

+0

現在正在運行完美,但它不完全是我在看什麼,第一個答案很好地做到了我正在尋找的完美,但感謝一百萬試圖:) –