Используя dplyr
, вы можете сделать:
df %>%
mutate(date = paste("2012", month, sep = "-"))
month div date
1 1 12 2012-1
2 1 18 2012-1
3 1 9 2012-1
4 1 5 2012-1
5 1 11 2012-1
6 1 2 2012-1
7 1 14 2012-1
8 1 15 2012-1
9 1 5 2012-1
10 1 4 2012-1
11 2 18 2012-2
Предполагая, что все последующие месяцы с 2012-1 покрыты, используя dplyr
и data.table
, вы можете попробовать это:
df %>%
mutate(temp = rleid(month)) %>%
arrange(month, temp) %>%
group_by(month) %>%
mutate(temp2 = rleid(temp) - 1,
year = paste(ifelse(temp2 == 0, 2012, 2012 + temp2), month, sep = "-")) %>%
select(-temp, -temp2)
month div year
<dbl> <int> <chr>
1 1. 11 2012-1
2 1. 1 2012-1
3 1. 3 2012-1
4 1. 14 2013-1
5 1. 16 2013-1
6 1. 14 2013-1
7 2. 4 2012-2
8 2. 7 2012-2
9 2. 8 2012-2
10 3. 18 2012-3
Пример данных:
df <- data.frame(month = c(rep(1, 3), rep(2, 3), rep(3, 3), rep(4, 3),rep(5, 3),
rep(6, 3), rep(7, 3), rep(8, 3), rep(9, 3), rep(10, 3),
rep(11, 3), rep(12, 3), rep(1, 3)),
div = sample(1:20, 39, replace=TRUE))