2016-04-25 12 views
0

Ich möchte eine Funktion nach Gruppen in meinem Dataframe ausführen. Die Funktion vergleicht benachbarte Zeilen, sollte jedoch für jede Gruppe "zurückgesetzt" werden. Ich habe versucht, die folgenden:Kombinieren Sie group_by() mit benutzerdefinierten Funktion oder Operation

library(dplyr) 
df1 <- as.data.frame(list('x'=1:6,'y'=(1:6)^2,'z'=5:10, 'g'=c(4,4,4,5,5,5), 
          'h'=c('a','a','b','b','c','c'))) 
df1 <- group_by(df1,h) %>% 
    for (i in 2:nrow(df1)) { 
    df1$Head.Distance[i] <- with(df1, sqrt((x[i] - x[i-1])^2 + 
              (y[i] - y[i-1])^2 + 
              (z[i] - z[i-1])^2)) 
    } 

aber dies führt zu einem NULL-Wert für df1. Wie kann ich diesen Vorgang für jede Gruppe ausführen? (Als Hinweis, sollte der Betrieb verlassen die erste Zeile NA oder 0.)

Antwort

2

Ich glaube, Sie für mutate suchen können und lag:

df1 %>% 
    group_by(h) %>% 
    mutate(xl = (x - lag(x,1))^2, 
     yl = (y - lag(y,1))^2) 
+0

Dank! Genau das habe ich gesucht! –

Verwandte Themen