2016-04-25 10 views
0

私のデータフレーム内のグループで関数を実行したいと思います。この関数は隣接する行を比較しますが、各グループに対して「リセット」する必要があります。私は次を試しました:group_by()とカスタム関数または操作を組み合わせる

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)) 
    } 

しかし、これはNULL値のdf1になります。この操作を各グループでどのように実行できますか? (注意点として、動作は、第1行目NAまたは0を残す必要があります。)

答えて

2

を私はあなたがmutatelagを探しているかもしれないと思う:

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

ありがとう!それはまさに私が探していたものです! –

関連する問題