在R中跳过对具有完整NA的dplyr组变量对的na_interpolation。

问题描述 投票:1回答:1

我有一个数据框架,看起来像这样。

   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观测值的组变量对,让它们保持原样。有什么解决办法吗?谢谢!我有一个数据框,看起来像一个数据框。

r dplyr interpolation na
1个回答
0
投票

找到了一个解决方案:

只需插值:

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)}))
© www.soinside.com 2019 - 2024. All rights reserved.