2016-05-23 6 views
2

Ich versuche Werte innerhalb einer Gruppe mit dplyr und approx linear zu interpolieren() Leider haben einige der Gruppen alle fehlenden Werte, daher würde ich die Annäherung an überspringe diese Gruppen einfach und fahre fort für den Rest. Ich möchte die Daten der nächsten Nachbarbeobachtung nicht extrapolieren oder verwenden.lineare Interpolation mit dplyr aber Überspringen von Gruppen mit allen fehlenden Werten

Hier ist ein Beispiel für die Daten. Die erste Gruppe (nach ID) fehlt, die andere sollte interpoliert werden.

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) 

Aber dann bekomme ich die Fehler

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

ich diesen Fehler nicht, wenn ich von den Gruppen loszuwerden, die alle gefehlt haben, aber das ist nicht machbar.

Antwort

2

Wir können dieses Problem beheben, indem ein filter Schritt mit der erforderlichen Anzahl von Datenpunkten ergänzt:

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) 

wir hier die Anzahl der Nicht-NA Elemente in der Spalte Wert summieren, und alle Gruppen, entfernen, die nicht tun haben >=2.

+0

Ausgezeichnet, danke. Das ist sehr sauber und zeigt, warum Rohre (%>%) groß sind. – Irix3537106

Verwandte Themen