2016-06-15 23 views
0

私は動物追跡データセットを作成しています。各個人のGPS位置ごとのタイムスタンプの時間差を計算する必要があります。 を簡単にするために、私のデータは、この(今のところ他の変数を忘れることができます)のようになります。Rパッケージ "plyr"でddplyを使用して新しい列を作成

ID Time 
B1 6:57 
B1 6:59 
B1 7:03 
B1 7:10 
B2 6:34 
B2 6:45 
B2 6:47 
B2 6:48 
B3 6:23 
B3 6:35 
B3 6:46 
B3 6:47 

私は、次を使用して時間差を計算してみました:

ddply(df, "ID",transform,timediff=diff(Time)) 

私はこのエラーを取得するしかし、メッセージ:

data.frameでのエラー(リスト(IDの= Cの(1L、1L、1L、1L)、時間= 8時11分):4、3:
引数は、行の数が異なる暗示

それぞれの動物の最初の行に値がないと仮定します。これを回避する方法はありますか?どんな助けも大歓迎です。

+1

試してみる 'c(NA、diff(Time))' – Bulat

+0

あなたの素早い返信をありがとう!!! 私は試しました 'ddply(時間、"個人 "、変換、timediff = c(NA、diff(時間))' しかし、私は "+"を取得するので、まだ何かが欠けています – Splash1199

+1

閉じるブラケット。 –

答えて

0

あなたは私たちは、 '時間' はdatetime型のクラスであると仮定しbase R

df1$timediff <- with(df1, ave(as.numeric(Time), ID, FUN = function(x) c(NA, diff(x)))) 

からaveを使用することができますdata.table

library(data.table) 

# create a lag variable of time by ID 
setDT(data)[, timediff:=c(NA, Time[-.N]), by=ID] 

dt 
#>  ID Time timediff 
#> 1: B1 6:57  NA 
#> 2: B1 6:59  8 
#> 3: B1 7:03  9 
#> 4: B1 7:10  10 
#> 5: B2 6:34  NA 
#> 6: B2 6:45  2 
#> 7: B2 6:47  4 
#> 8: B2 6:48  6 
#> 9: B3 6:23  NA 
#> 10: B3 6:35  1 
#> 11: B3 6:46  3 
#> 12: B3 6:47  5 
0

を使用することができます。

関連する問題