2016-05-23 18 views
2

dplyrとapprox()を使用してグループ内の値を直線補間しようとしています。残念ながら、グループの中には欠損値があります。それらのグループをスキップして残りの部分を処理してください。私は、最も近い近隣の観測データを外挿したり、使用したりしたくありません。dplyrで線形補間を行いますが、すべての欠損値を含むスキップグループ

ここにデータの例を示します。最初のグループ(IDによる)はすべて欠けており、もう1つは補間されるべきです。

data <- read.csv(text=" 
id,year,value 
c1,1998,NA 
c1,1999,NA 
c1,2000,NA 
c1,2001,NA 
c2,1998,14 
c2,1999,NA 
c2,2000,NA 
c2,2001,18") 

dataIpol <- data %>% 
group_by(id) %>% 
arrange(id, year) %>%    
mutate(valueIpol = approx(year, value, year, 
       method = "linear", rule = 1, f = 0, ties = mean)$y) 

しかし、その後、私は私がすべての行方不明ているグループを取り除くが、それが不可能だ場合、私はこのエラーを取得しない

Error: need at least two non-NA values to interpolate 

エラーが発生します。

答えて

2

私たちは、データポイントの必要数とfilterステップを追加することによってこの問題を解決することができます

library(dplyr) 
dataIpol <- data %>% 
    group_by(id) %>% 
    arrange(id, year) %>% 
    filter(sum(!is.na(value))>=2) %>% #filter! 
    mutate(valueIpol = approx(year, value, year, 
          method = "linear", rule = 1, f = 0, ties = mean)$y) 

ここでは、値列に非NAの項目の数を合計し、とそうでない任意のグループを削除します持っているのは>=2です。

+0

ありがとう、ありがとう。これは非常にきれいで、パイプ(%>%)が優れている理由を示しています。 – Irix3537106

関連する問題