首页 > 解决方案 > 将新的推算数据按组插入数据表中

问题描述

我有一个数据表,我想在两年之间插入新行估算值。这将在许多 ID 组上完成。我该如何将数据复制到新行中?

# data table
dt <- data.table(ID=c(rep(1:3,each=3)), 
attrib1=rep(c("sdf","gghgf","eww"),each=3), 
attrib2=rep(c("444","222","777"),each=3), 
Year = rep(c(1990, 1995, 1996), 3), 
value = c(12,6,7,6,3,1,9,17,18))

因此对于所有组 (ID),年份将从 1990 年到 1996 年,而 1990 年和 1995 年的 2 个值将被线性估算。所有其他属性将保持不变并被复制到新行中。

我已经完成了这个非常长的工作并尝试了一个自定义功能,但无济于事

标签: rdata.table

解决方案


您可以使用tidyr::complete来扩展年份和zoo::na.approx值的插值。

library(dplyr)

dt %>%
  group_by(ID, attrib1, attrib2) %>%
  tidyr::complete(Year = min(Year):max(Year)) %>%
  mutate(value = zoo::na.approx(value))

#     ID attrib1 attrib2  Year value
#   <int> <chr>   <chr>   <dbl> <dbl>
# 1     1 sdf     444      1990  12  
# 2     1 sdf     444      1991  10.8
# 3     1 sdf     444      1992   9.6
# 4     1 sdf     444      1993   8.4
# 5     1 sdf     444      1994   7.2
# 6     1 sdf     444      1995   6  
# 7     1 sdf     444      1996   7  
# 8     2 gghgf   222      1990   6  
# 9     2 gghgf   222      1991   5.4
#10     2 gghgf   222      1992   4.8
# … with 11 more rows

推荐阅读