У меня есть кадр данных, показывающий много контрактов на длительный период времени.Я хочу сделать два расчета.
1) подсчитайте, сколько часов есть на каждый месяц контракта, умножьте это на стоимость и количество 2) и получите данные, возвращенные во фрейме данных на группу.
Данные:
df <- structure(list(Fromdate = structure(c(1388530800, 1388530800,
1388530800, 1388530800, 1388530800, 1388530800, 1388530800, 1388530800,
1388530800, 1420066800, 1388530800, 1388530800, 1388530800, 1388530800,
1420066800), class = c("POSIXct", "POSIXt"), tzone = "CET"),
Todate = structure(c(1419980400, 1419980400, 1419980400,
1419980400, 1419980400, 1419980400, 1419980400, 1419980400,
1419980400, 1451516400, 1419980400, 1419980400, 1419980400,
1419980400, 1451516400), class = c("POSIXct", "POSIXt"), tzone = "CET"),
Cost = c(1.58, 1.58, 1.58, 1.58, 1.58, 1.58, 1.58, 1.58,
1.58, 1.58, 1.58, 1.58, 1.58, 1.58, 1.58), Quantity = c(0.112311303786473,
0.0205773161568493, 0.0493657482020549, 0.0437536029132876,
0.0278005475976713, 0.0295483138287671, 0.066499635323105,
0.066499635323105, 0.733925139981052, 0.733925139981051,
0.1067060088379, 0.436262087700001, 0.0667432627739724, 0.0925740588127852,
0.0925740588127855), Group = structure(c(1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L), .Label = c("A",
"B", "C"), class = "factor")), class = "data.frame", row.names = c(NA,
-15L))
1) Вычисление, которое я хочу сделать, просто применимо к этому:
table(
format(seq.POSIXt(df$Fromdate[1], to = df$Todate[1], by = "hour"), "%Y-%m")
) * df$Cost[1] * df$Quantity[1]
2014-01 2014-02 2014-03 2014-04 2014-05 2014-06 2014-07 2014-08 2014-09 2014-10 2014-11 2014-12
132.0242 119.2476 131.8467 127.7653 132.0242 127.7653 132.0242 132.0242 127.7653 132.2016 127.7653 127.9428
Но, для моей жизни,Я не могу понять это и применить, lapply или любые purrr-функции.
2) В конце я также хочу сгруппировать его по группам, поэтому конечный результат должен быть списком или фреймом данных с отдельными месяцами и суммарными затратами на группу.
Примерно так:
df %>% group_by(Group, month_year) %>%
summarise_each(table(
format(
seq.POSIXt("FromDate", "Todate", by = "hour")
, "%Y-%m") # this is month_year
) * Cost * Quantity )
Или проще для понимания - конечный результат должен быть просто: (цифры не верны)
2014-01 2014-02 .... 2015-12
A 600 900 ... 1100
B 650 600 ... 1870
C 400 700 ... 990