2015-02-23 3 views
-1

Я пытаюсь вычислить среднее значение или значение для каждого идентификатора клиента. Для данных ниже:Средняя стоимость для каждого клиента в R

customerID <- c(1,1,1,1,2,2,2,2,3,3) 

dates <- c(20130401, 20130403, 20130504, 20130508, 20130511, 
     20130716, 20130719, 20130723, 20130729, 20130907) 
cost <- c(12, 41, 89, 45.5, 32.89, 74, 76, 12, 15.78, 10) 

data <- data.frame(customerID, dates,cost) 

data$dates <- as.Date(as.character(data$dates), "%Y%m%d") 

# data2 <- aggregate(cbind(average_cost=cost) + customerID, data, mean) 

данных выглядит следующим образом:

customerID dates cost 
1 20130401 12 
1 20130403 41 
1 20130504 89 
1 20130508 45.5 
2 20130511 32.89 
2 20130716 74 
2 20130719 76 
2 20130723 12 
3 20130729 15.78 
3 20130907 10 

Как я могу получить результат, похожий на этот? Я могу получить среднее значение для всего набора данных, но не для каждого идентификатора клиента. Благодаря!

customerID average_cost 
1   46.875 
2   48.7225 
3   12.89 
+0

@David arenburg. Да, это другое. Раньше он должен был найти общую сумму для каждого клиента вместе с датами. Этот вопрос касается только клиента и среднего для каждого клиента. Даты здесь не так важны, как в предыдущих вопросах. Значения набора данных выглядят одинаково, но я пытаюсь использовать разные сценарии. – sharp

+0

Этот вопрос является конкретным случаем обмана. –

+0

@DavidArenburg. О, я вижу. Не видел ссылку наверху. Благодарю. – sharp

ответ

0

dplyr решение

library(dplyr) 
df %>% 
    group_by(customerID) %>% 
    summarise(average_cost = mean(cost)) 

    customerID average_cost 
1   1  46.8750 
2   2  48.7225 
3   3  12.8900 

data.table решение

library(data.table) 
dt <- as.data.table(df) 
dt[, .(average_cost = mean(cost)), by=customerID] 

Кроме того, если вы просто хотите база R

aggregate(cost ~ customerID, data=df, mean) 
+0

Спасибо! Я использовал совокупность (cost ~ customerID, data = df, mean) – sharp

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