Я пытаюсь заполнить пропущенные значения года группой как постепенно, так и постепенно, когда я знаю, что каждое увеличение / уменьшение должно быть 1. Вот воспроизводимый пример. Обратите внимание, что есть два идентификатора, где первый идентификатор начинается в 2002 году (хотя он отсутствует), а второй идентификатор начинается в 2007 году (опять же отсутствует). Я знаю это по текущему году, и тот факт, что приращение / уменьшение должно быть 1.
id <- rep(c("01012895", "01021890"), each = 6)
value <- c(rnorm(12))
year <- c("NA", "NA", 2004, "NA", "NA", 2007, "NA", "NA", "NA", 2010, "NA", "NA")
df <- data.frame(id, value, year)
df
id value year
1 01012895 -1.05853432 NA
2 01012895 0.06480395 NA
3 01012895 -3.32811206 2004
4 01012895 -0.33427578 NA
5 01012895 -0.22790538 NA
6 01012895 1.46991465 2007
7 01021890 -0.65928777 NA
8 01021890 -0.25701765 NA
9 01021890 1.24331689 NA
10 01021890 0.10006530 2010
11 01021890 -0.83971071 NA
12 01021890 1.15893263 NA
df2 - это то, что я хочу в конце концов.
year2 <- c(2002:2007, 2007:2012)
df2 <- data.frame(id, value, year2)
Я пытался найти способ использовать fill
, как в df3
, но он переносит только существующие значения без возможности его изменения.
df3 <- df %>% group_by(site_no) %>% fill(year, .direction = "updown")