Ниже приведен пример набора данных с несколькими лет, которые я полагаю, ваш желаемый вариант использования:
myData <-
data.frame(
Date = 2011:2015
, Total = (1:5)*1200
)
Затем я разделить data.frame вверх по столбцу Date
(это предполагает, что эти годы уникальны), зациклившись на lapply
, чтобы внести изменения в нужные вам месячные значения, затем сшили их вместе с bind_rows
от dplyr
(также необходимо загрузить dplyr
или magrittr
для труб (%>%
) для работы).
myData %>%
split(.$Date) %>%
lapply(function(x){
temp <- data.frame(
Date = as.Date(paste(x$Date
, formatC(1:12, width = 2, flag = "0")
, "01"
, sep = "-"))
, Total = x$Total/12
)
}) %>%
bind_rows()
дает (примечание, используя ...
для обозначения пропущенных строк)
Date Total
1 2011-01-01 100
2 2011-02-01 100
3 2011-03-01 100
...
16 2012-04-01 200
17 2012-05-01 200
18 2012-06-01 200
...
29 2013-05-01 300
30 2013-06-01 300
31 2013-07-01 300
...
43 2014-07-01 400
44 2014-08-01 400
45 2014-09-01 400
...
58 2015-10-01 500
59 2015-11-01 500
60 2015-12-01 500
Если, как это было предложено в комментариях, вы должны разделить различным числом месяцев каждый год, я бы создать вектор разделов, названных в течение лет. Здесь я использую dplyr
для n_distinct
и трубу magrittr
, чтобы облегчить назначение общего случая. Затем добавить/изменить запись на другой год:
toDivide <-
rep(12, n_distinct(myData$Date)) %>%
setNames(sort(unique(myData$Date)))
toDivide["2016"] <- 9
Тогда вместо 12
, как указано выше, вы можете использовать этот вектор. Так, замените это:
Total = x$Total/12
в петле lapply
, с этим:
Total = x$Total/toDivide[as.character(x$Date)]
и он должен разделить вхождением на этот год, а не всегда деления на одно и то же.
Приносим извинения за неправильное посадку в стол ... Новичок в stackoverflow. – CGermain
У вас есть метка MySQL. Получают ли данные из базы данных? – Parfait