我有一个数据框架,看起来像这样。
Country Year acnt_class wages
3 AZE 2010 NA NA
4 AZE 2011 0.4206776 NA
5 AZE 2012 NA NA
6 AZE 2013 NA NA
7 AZE 2014 0.7735889 0.4273174
8 AZE 2015 NA NA
9 AZE 2016 NA NA
10 AZE 2017 0.5108674 0.4335978
11 AZE 2018 NA NA
15 BDI 2010 NA NA
16 BDI 2011 0.3140646 NA
17 BDI 2012 NA NA
18 BDI 2013 NA NA
19 BDI 2014 0.1224175 NA
20 BDI 2015 NA NA
21 BDI 2016 NA NA
22 BDI 2017 NA NA
23 BDI 2018 NA NA
27 BEL 2010 NA NA
28 BEL 2011 0.9576057 NA
29 BEL 2012 NA NA
30 BEL 2013 NA NA
31 BEL 2014 1.0083120 0.9623492
32 BEL 2015 NA NA
33 BEL 2016 NA NA
34 BEL 2017 1.0036910 0.9499486
35 BEL 2018 NA NA
我试图运行这个函数 用stine插值法来填补 "acnt_class "和 "wages "这两个变量列中缺失的NAs的组别。
DF <- DF %>%
group_by(Country) %>%
mutate_at(.vars = c("acnt_class", "wages"),
.funs = ~na_interpolation(., option = "stine"))
只要我在每组至少有两个观测值的列上运行它就可以了 但是,在这里,我遇到了这个错误:
Error in na_interpolation(., option = "stine") :
Input data needs at least 2 non-NA data point for applying na_interpolation
由于 "BDI "组的变量 "wages "有完整的NAs.
理想的情况是,我正在寻找一个修改后的函数,它可以 "跳过 "具有完整NAs1观测值的组变量对,让它们保持原样。有什么解决办法吗?谢谢!我有一个数据框,看起来像一个数据框。
找到了一个解决方案:
只需插值:
library(TSimpute)
library(dplyr)
library(zoo)
DF <- DF %>%
group_by(Country) %>%
mutate_at(vars(acnt_class, wages), funs(if(sum(!is.na(.))<2) {.} else{replace(na_interpolation(., option = "stine"), is.na(na.approx(., na.rm=FALSE)), NA)}))