Я - полный новичок в R, и мне просто нужно быстро очистить мои данные. Но я столкнулся с проблемой, которую не могу обернуть.
Так что у меня есть Postgres дБ с сериями времени, столбцы ID, DATE и VALUE (температура). Каждый идентификатор - это новая измерительная станция, поэтому у меня есть время ser ie для каждого идентификатора (около 2000 уникальных идентификаторов, 4 миллиона строк). Даты охватывают период 1915-2016 гг., Некоторые серии частично совпадают, а некоторые нет. Если в течение недели отсутствуют измерения, я хочу заполнить эти недели значением NA (которое я интерполирую после).
Проблема, с которой я сталкиваюсь, заключается в том, что complete(Date.seq)
создает значения NA для всех недель между 1915 и 2016, я четко понимаю, почему это происходит. Как я могу сделать так, чтобы он заполнял только значения между фактической датой начала и окончания указанного времени c timeser ie? Я хочу, чтобы скользящие минимальные и максимальные значения зависели от начальной и конечной даты каждого указанного идентификатора c, а затем заполняли отсутствующие даты между начальной и конечной датой каждого идентификатора.
library("RpostgreSQL")
library("tidyverse")
library("lubridate")
con <- dbConnect(PostgreSQL(), user = "postgres",
dbname="", password = "", host = "localhost", port= "5432")
out <- dbGetQuery(con, "SELECT * FROM *******.Weekly_series")
out %>%
group_by(ID)%>%
mutate(DATE = as.Date(DATE)) %>%
complete(DATE = seq(ymd("1915-04-14"), ymd("2016-03-30"), by= "week"))
Игнорировать ошибки в соединительной линии.
Заранее спасибо.
Edit1 Пример данных
ID DATE VALUE
1 2015-10-01 1
1 2015-10-08 1
1 2015-10-15 1
1 2015-10-29 1
2 1956-01-01 1
2 1956-01-15 1
2 1956-01-22 1
3 1982-01-01 1
3 1982-01-15 1
3 1982-01-22 1
3 1982-01-29 1
Ожидаемый результат
ID DATE VALUE
1 2015-10-01 1
1 2015-10-08 1
1 2015-10-15 1
1 2015-10-22 NA
1 2015-10-29 1
2 1956-01-01 1
2 1956-01-08 NA
2 1956-01-15 1
2 1956-01-22 1
3 1982-01-01 1
3 1982-01-08 NA
3 1982-01-15 1
3 1982-01-22 1
3 1982-01-29 1