2016-01-17 2 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, а также дополнения пакетов. Поиск «split-apply-comb» должен привести вас ко всем из них.

+0

безупречный! именно то, что я ищу! спасибо большое Я хотел бы задать вам вопрос, так что в основном я говорю «получить цену каждой страны назначения», когда я делаю (priceusd ~ destinationcountry)? –

+0

Я хотел бы также спросить вас, когда я запускаю код, который вы написали, он отлично работает и показывает 60 результатов «60 стран», но я хотел бы получить только 10 результатов из этих 60, возможно ли это так же? –

+0

@FadiGilbertChar Подмножество данных в этих странах: 'aggregate (priceusd ~ destinationcountry, data = training.data.raw [training.data.raw $ destinationcountry% in% c (" ES "," TR "),], FUN = mean) ' – Thomas

0

Вы можете использовать dplyr для этого.

library(dplyr) 

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

Это вычислит среднее значение для каждой группы.

+0

Я пробовал, но он говорит Ошибка: не удалось найти функцию «%>%» –

+0

Мне не хватает инструкции 'library (dplyr)', я просто добавил Это. Если это не исправить, вам, скорее всего, придется либо обновить 'dplyr', либо установить и использовать пакет' magrittr'. – steveb

+0

Бег совершенен сейчас, но это не совсем то, на что я смотрю, первый ответ хорошо делает то, что я ищу, но спасибо миллион за попытку :) –

Смежные вопросы