根据 ID 将值复制到其他 NA 单元格

Copy value to other NA cells based upon ID

我正在尝试将具有值的 diff 列的值复制到匹配 client_id 的相应空单元格中。我确信这在 data.table 中很容易完成,但我不确定如何做到。

这是我的数据:

client_id <- c(1,1,1,2,2,3,3,3,3,4,4)
date <- c("1/1/2021","1/2/2021","1/3/2021","5/1/2021","10/1/2021","10/1/2021","11/1/2021","1/2/2021","10/9/2021","15/9/2021","16/10/2021")
date <- as.Date(date, '%d/%m/%Y')
score <- c(15,10,19,20,10,25,20,15,10,30,5)
diff <- c(NA, NA, -4, NA, 10, NA, NA, NA, 15, NA, 25)
df <- data.frame(client_id, date, score, diff)
df <-setDT(df)

我想以此结束:

client_id <- c(1,1,1,2,2,3,3,3,3,4,4)
date <- c("1/1/2021","1/2/2021","1/3/2021","5/1/2021","10/1/2021","10/1/2021","11/1/2021","1/2/2021","10/9/2021","15/9/2021","16/10/2021")
date <- as.Date(date, '%d/%m/%Y')
score <- c(15,10,19,20,10,25,20,15,10,30,5)
diff <- c(-4, -4, -4, 10, 10, 15, 15, 15, 15, 25, 25)
df <- data.frame(client_id, date, score, diff)
df <-setDT(df)

感谢您的帮助!

有多种方法可以做到这一点,具体取决于您的数据。这是 nafill:

的“下一次观察”形式
df[, diff := nafill(diff, type = "nocb"), by = .(client_id)][]
#     client_id       date score  diff
#         <num>     <Date> <num> <num>
#  1:         1 2021-01-01    15    -4
#  2:         1 2021-02-01    10    -4
#  3:         1 2021-03-01    19    -4
#  4:         2 2021-01-05    20    10
#  5:         2 2021-01-10    10    10
#  6:         3 2021-01-10    25    15
#  7:         3 2021-01-11    20    15
#  8:         3 2021-02-01    15    15
#  9:         3 2021-09-10    10    15
# 10:         4 2021-09-15    30    25
# 11:         4 2021-10-16     5    25