Мы можем использовать format.Date
для извлечения года и месяца и использовать это как group_by
переменную:
library(dplyr)
df %>%
group_by(Month = format.Date(date, format="%Y-%m")) %>%
mutate(contract_flag = ifelse(sum(budget_case) > 0 & sum(actual_case) > 0, 1, 0))
или case_when
:
df %>%
group_by(Month = format.Date(date, format="%Y-%m")) %>%
mutate(contract_flag = case_when(sum(budget_case) > 0 & sum(actual_case) > 0 ~ 1, TRUE ~ 0))
Результат:
# A tibble: 16 x 6
# Groups: Month [3]
date contract budget_case actual_case contract_flag Month
<chr> <chr> <int> <int> <dbl> <chr>
1 2017-01-01 F123 200 100 1 2017-01
2 2017-01-02 F123 200 100 1 2017-01
3 2017-01-03 F123 200 100 1 2017-01
4 2017-01-04 F123 200 100 1 2017-01
5 2017-01-05 F123 200 100 1 2017-01
6 2017-01-06 F123 200 100 1 2017-01
7 2017-01-29 F123 200 100 1 2017-01
8 2017-01-30 F123 200 100 1 2017-01
9 2017-01-01 K456 0 0 1 2017-01
10 2017-01-02 K456 0 0 1 2017-01
11 2017-01-03 K456 0 0 1 2017-01
12 2017-01-04 K456 0 0 1 2017-01
13 2017-01-05 K456 0 0 1 2017-01
14 2017-02-06 K456 0 100 1 2017-02
15 2017-02-28 K456 200 0 1 2017-02
16 2017-03-30 K456 0 0 0 2017-03
Данные (изменен столбец даты для дополнительных примеров месяца):
df <- structure(list(date = c("2017-01-01", "2017-01-02", "2017-01-03",
"2017-01-04", "2017-01-05", "2017-01-06", "2017-01-29", "2017-01-30",
"2017-01-01", "2017-01-02", "2017-01-03", "2017-01-04", "2017-01-05",
"2017-02-06", "2017-02-28", "2017-03-30"), contract = c("F123",
"F123", "F123", "F123", "F123", "F123", "F123", "F123", "K456",
"K456", "K456", "K456", "K456", "K456", "K456", "K456"), budget_case = c(200L,
200L, 200L, 200L, 200L, 200L, 200L, 200L, 0L, 0L, 0L, 0L, 0L,
0L, 200L, 0L), actual_case = c(100L, 100L, 100L, 100L, 100L,
100L, 100L, 100L, 0L, 0L, 0L, 0L, 0L, 100L, 0L, 0L), contract_flag = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("date",
"contract", "budget_case", "actual_case", "contract_flag"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16"))