Функция seq
имеет несколько интересных функций, которые вы можете использовать для простой генерации полной последовательности дат.Например, следующий код можно использовать для генерации последовательности дат, начинающейся 25 апреля:
Редактировать: Эта функция задокументирована в ?seq.Date
start = as.Date("2011/04/25")
full <- seq(start, by='1 day', length=15)
full
[1] "2011-04-25" "2011-04-26" "2011-04-27" "2011-04-28" "2011-04-29"
[6] "2011-04-30" "2011-05-01" "2011-05-02" "2011-05-03" "2011-05-04"
[11] "2011-05-05" "2011-05-06" "2011-05-07" "2011-05-08" "2011-05-09"
Теперь используйте тот же принцип для генерации некоторых данных с «пропущенными» строками, генерируя последовательность для каждого второго дня:
partial <- data.frame(
date=seq(start, by='2 day', length=6),
value=1:6
)
partial
date value
1 2011-04-25 1
2 2011-04-27 2
3 2011-04-29 3
4 2011-05-01 4
5 2011-05-03 5
6 2011-05-05 6
Чтобы ответить на ваш вопрос, можно использовать векторную подписку или функцию match
Чтобы создать набор данных с NA:
with(partial, value[match(full, date)])
[1] 1 NA 2 NA 3 NA 4 NA 5 NA 6 NA NA NA NA
Чтобы объединить этот результат с исходными полными данными:
data.frame(Date=full, value=with(partial, value[match(full, date)]))
Date value
1 2011-04-25 1
2 2011-04-26 NA
3 2011-04-27 2
4 2011-04-28 NA
5 2011-04-29 3
6 2011-04-30 NA
7 2011-05-01 4
8 2011-05-02 NA
9 2011-05-03 5
10 2011-05-04 NA
11 2011-05-05 6
12 2011-05-06 NA
13 2011-05-07 NA
14 2011-05-08 NA
15 2011-05-09 NA