r - 通过分组插值来估算缺失值

标签 r data.table data-manipulation missing-data imputets

我正在尝试通过多个组插值来估算缺失值NA

我只是子集一个简单的例子:

Year    ST   CC   ID     MP     PS 
2002    15   3     3     NA    1.5
2003    15   3     3     NA    1.5
2004    15   3     3    193    1.5
2005    15   3     3    193    1.5
2006    15   3     3    348    1.5
2007    15   3     3    388    1.5
2008    15   3     3    388    1.5
1999    53   33    1     NA    3.4 
2000    53   33    1     NA    3.4        
2002    53   33    1     NA    2.9           
2003    53   33    1     NA    2.6           
2004    53   33    1     NA    2.6         
2005    53   33    1    170    3.8         
2006    53   33    1    170    3.0           
2007    53   33    1    330    4.2         
2008    53   33    1    330    5.0           

我使用了na.approx()但出错了。看来我的数据在每组的第一次观察中都有缺失值。

setDT(dt)[, MP_interpolate := na.approx(MP, na.rm = T), .(Year, ST, CC, ID)]

setDT(dt)[, MP_interpolate := if(length(na.omit(MP))<2) MP else na.approx(MP, na.rm=TRUE), .(Year, ST, CC, ID)]

我也尝试过包 imputeTS 但不起作用。

两者都不正确。这是否意味着使用插值来估算缺失不是一个好主意?

我不确定哪种插补方法更好(不想使用meanmedian)。我正在考虑使用 PS 趋势来估算 MP。 (只是我的想法,不是问题)

最佳答案

您可以在 ave 中尝试 imputeTS::na_kalman。这也推断出您可能想要什么。

library(imputeTS)

dt$MP.imp <- with(dt, ave(MP, ST, CC, ID, FUN=na_kalman))
#    Year ST CC ID  MP  PS   MP.imp
# 1  2001 15  3  3  NA 1.5 193.0000
# 2  2002 15  3  3  NA 1.5 193.0000
# 3  2003 15  3  3  NA 1.5 193.0000
# 4  2004 15  3  3 193 1.5 193.0000
# 5  2005 15  3  3 193 1.5 193.0000
# 6  2006 15  3  3 348 1.5 348.0000
# 7  2007 15  3  3 388 1.5 388.0000
# 8  2008 15  3  3 388 1.5 388.0000
# 9  1999 53 33  1  NA 3.4 170.2034
# 10 2000 53 33  1  NA 3.4 166.3867
# 11 2002 53 33  1  NA 2.9 164.4496
# 12 2003 53 33  1  NA 2.6 165.0018
# 13 2004 53 33  1  NA 2.6 168.6527
# 14 2005 53 33  1 170 3.8 170.0000
# 15 2006 53 33  1 170 3.0 170.0000
# 16 2007 53 33  1 330 4.2 330.0000
# 17 2008 53 33  1 330 5.0 330.0000

您可能希望在 ave 中包含 year,否则它在示例数据中将无法工作。

关于r - 通过分组插值来估算缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60574665/

相关文章:

r - 如何从ggmap中删除边距

r - plm 或 lme4 用于面板数据的随机和固定效应模型

r - 计算两点之间所有可能的斜率

r - Dplyr 对分组数据同时按值过滤顶行和底行

r - 查找 NA 在 0 和 1 之间的行

r - 在现有数据框中添加向量作为新列

r - data.table 按索引重新排序列

r - 将字符 ID 转换为数字 ID

javascript - 访问包含具有未知属性名称的对象和数组的嵌套数据结构中的数组

python - 将一组值放入数据框内的单元格中