2015-11-22 3 views
0

У меня есть столбец даты и столбец цен:Добавление значений столбцов в соответствии с датами

date = c(2012/12/12 00:00:00.000, 2012/12/12 00:00:00.000, 2012/12/12 00:00:00.000, 2012/12/19 00:00:00.000, 2012/12/19 00:00:00.000, 2013/01/02 00:00:00.000, 2013/01/09 00:00:00.000, 2013/01/19 00:00:00.000, 2013/02/05 00:00:00.000, 2013/02/19 00:00:00.000, 2013/02/26 00:00:00.000, 2013/03/05 00:00:00.000, 2013/03/12 00:00:00.000, 2013/03/20 00:00:00.000, 2013/03/26 00:00:00.000, 2013/04/02 00:00:00.000, 2013/04/09 00:00:00.000, 2013/04/16 00:00:00.000, 2013/04/23 00:00:00.000, 2013/04/30 00:00:00.000, 2013/05/08 00:00:00.000, 2013/06/04 00:00:00.000, 2013/06/29 00:00:00.000, 2013/07/29 00:00:00.000, 2013/08/26 00:00:00.000, 2013/09/19 00:00:00.000, 2013/10/14 00:00:00.000, 2013/10/21 00:00:00.000, 2013/10/30 00:00:00.000, 2013/11/05 00:00:00.000, 2013/11/13 00:00:00.000, 2013/11/20 00:00:00.000, 2013/11/26 00:00:00.000, 2013/12/03 00:00:00.000, 2013/12/10 00:00:00.000, 2013/12/19 00:00:00.000, 2013/12/26 00:00:00.000, 2014/01/03 00:00:00.000, 2014/01/09 00:00:00.000, 2014/01/24 00:00:00.000, 2014/01/31 00:00:00.000, 2014/02/06 00:00:00.000, 2014/02/13 00:00:00.000, 2014/02/20 00:00:00.000, 2014/03/01 00:00:00.000, 2014/03/08 00:00:00.000, 2014/03/14 00:00:00.000, 2014/03/28 00:00:00.000, 2014/04/03 00:00:00.000, 2014/04/10 00:00:00.000, 2014/04/25 00:00:00.000, 2014/05/02 00:00:00.000, 2014/05/09 00:00:00.000, 2014/06/28 00:00:00.000, 2014/07/05 00:00:00.000, 2014/07/23 00:00:00.000) 

price = rep(23.5, 56) 

Каждая дата является датой совершения сделки, а цена является только цена продукта. Я хочу рассчитать сумму денег, потраченную за последние 12 недель. Это означает, что каждый раз, когда есть дата транзакции, я считаю 12 недель назад. Я могу вычислить суммарное количество:

ДФ = data.table (дата = дата, цена = цена) ДФ [, quantity.csum: = cumsum (цена)]

У меня сложилось впечатление, что довольно простой, но я не могу найти способ сделать это на 12 недель (или любое количество недель, которые я решаю позже).

Может кто-нибудь мне помочь?

Спасибо!

ответ

0

Определите столбец «период», который определяет период времени, который вы хотите рассмотреть и использовать, например. aggregate

date <- c("2012/12/12 00:00:00.000", "2012/12/12 00:00:00.000", 
      "2012/12/12 00:00:00.000", "2012/12/19 00:00:00.000", "2012/12/19 00:00:00.000", 
      "2013/01/02 00:00:00.000", "2013/01/09 00:00:00.000", "2013/01/19 00:00:00.000", 
      "2013/02/05 00:00:00.000", "2013/02/19 00:00:00.000", "2013/02/26 00:00:00.000", 
      "2013/03/05 00:00:00.000", "2013/03/12 00:00:00.000", "2013/03/20 00:00:00.000") 
price <- rep(23.5, 14) 
period <- c(rep("period1",5), rep(c("period2", "period3", "period4"), each=3)) 
df <- data.frame(date=date, price=price, period=period) 
df 
         date price period 
1 2012/12/12 00:00:00.000 23.5 period1 
2 2012/12/12 00:00:00.000 23.5 period1 
3 2012/12/12 00:00:00.000 23.5 period1 
4 2012/12/19 00:00:00.000 23.5 period1 
5 2012/12/19 00:00:00.000 23.5 period1 
6 2013/01/02 00:00:00.000 23.5 period2 
7 2013/01/09 00:00:00.000 23.5 period2 
8 2013/01/19 00:00:00.000 23.5 period2 
9 2013/02/05 00:00:00.000 23.5 period3 
10 2013/02/19 00:00:00.000 23.5 period3 
11 2013/02/26 00:00:00.000 23.5 period3 
12 2013/03/05 00:00:00.000 23.5 period4 
13 2013/03/12 00:00:00.000 23.5 period4 
14 2013/03/20 00:00:00.000 23.5 period4 

aggregate(price~period, data=df, sum) 
    period price 
1 period1 117.5 
2 period2 70.5 
3 period3 70.5 
4 period4 70.5 

EDIT:

df <- data.frame(date=date, price=price) 
df$date1 <- as.Date(df$date) 
df[df$date1 >= "2012-12-12" & df$date1 <= "2012-12-19", "period"] <- "period 1" 
df[df$date1 >= "2013-01-02" & df$date1 <= "2013-02-19", "period"] <- "period 2" 
df[df$date1 >= "2013-02-26" & df$date1 <= "2013-03-20", "period"] <- "period 3" 

aggregate(price~period, data=df, sum) 

EDIT 2:

twelve_weeks <- 7*12 # Seven days in one week 
df$date1 - twelve_weeks # Vector containing dates twelve 
         # weeks before each transaction dates 
+0

Эй! Благодаря! Но быстрый вопрос, как определить период? Я должен подсчитать количество недель между транзакциями, чтобы узнать, к какому периоду соответствует каждая дата. – Andres

+0

Используя 'as.Date', вы можете преобразовать переменную в класс' Date', который лучше обрабатывает дату и время. Я отредактировал свой ответ. – user3631369

+0

Спасибо! Я видел ваше редактирование, и теперь я вижу, что ошибаюсь в своих объяснениях. Мне нужны деньги, потраченные за последние 12 недель, т. Е. Каждый раз, когда появляется новая дата транзакции, я считаю 12 недель. Это своего рода количество опрокидывания. – Andres

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