Rで次のように配置されたデータがあります:
indv time val
A 6 5
A 10 10
A 12 7
B 8 4
B 10 3
B 15 9
各個体 ( ) ごとに、初期時からのindv
値の変化 ( ) を計算したいと思います。val
だから私はこのようなものになるだろう:
indv time val val_1 val_change
A 6 5 5 0
A 10 10 5 5
A 12 7 5 2
B 8 4 4 0
B 10 3 4 -1
B 15 9 4 5
誰かが私にこれを行う方法を教えてもらえますか? 使うことができます
ddply(df, .(indv), function(x)x[which.min(x$time), ])
のようなテーブルを取得するには
indv time val
A 6 5
B 8 4
val_1
しかし、個人ごとに最小値を合わせた列の作り方がわかりません。ただし、それができれば、val_change
次のようなものを使用して列を追加できるはずです。
df['val_change'] = df['val_1'] - df['val']
編集: 2 つの優れた方法が以下に掲載されていますが、どちらも私の時間列が並べ替えられているため、小さな時間値が高い時間値の上に表示されます。これが私のデータに常に当てはまるかどうかはわかりません。(Excel で最初に並べ替えることができることはわかっていますが、それを避けようとしています。) テーブルが次のように表示される場合、どのように対処すればよいでしょうか。
indv time value
A 10 10
A 6 5
A 12 7
B 8 4
B 10 3
B 15 9