Если у вас есть NA
значения в начале и конце группы, вы должны использовать na.rm = FALSE
, чтобы получить выходные данные того же размера, что и входные. При na.rm = TRUE
ведущий и конечный NA
s удаляются.
Кроме того, вам не следует группировать по year
, поскольку это даст вам только одно наблюдение в группе.
library(data.table)
setDT(dt)
dt[, MP_interpolate := as.integer(zoo::na.approx(MP, na.rm = FALSE)), .(ST, CC, ID)]
data
dt <- structure(list(Year = c(2002L, 2003L, 2004L, 2005L, 2006L, 2007L,
2008L, 1999L, 2000L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L,
2008L), ST = c(15L, 15L, 15L, 15L, 15L, 15L, 15L, 53L, 53L, 53L,
53L, 53L, 53L, 53L, 53L, 53L), CC = c(3L, 3L, 3L, 3L, 3L, 3L,
3L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L), ID = c(3L,
3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
MP = c(NA, NA, 193L, 193L, 348L, 388L, 388L, NA, NA, NA,
NA, NA, 170L, 170L, 330L, 330L), PS = c(1.5, 1.5, 1.5, 1.5,
1.5, 1.5, 1.5, 3.4, 3.4, 2.9, 2.6, 2.6, 3.8, 3, 4.2, 5)),
class = "data.frame", row.names = c(NA, -16L))