データフレームの経過時間を計算しようとしています。経過時間の「開始」値は、データフレームの因子列の値によって異なります。(簡単に言うと、時間の値を時間オブジェクトではなく数値として扱います。私の質問は、時間オブジェクトではなく、split-apply-combineに関するものです)。私のデータフレームは次のようになります。
df <- data.frame(id=gl(2, 3, 5, labels=c("a", "b")), time=1:5)
各時間から各要素レベルの最小時間を差し引いて経過時間を計算したいと思います(ただし、この例では、時間値ではなく数値のみを扱います)。したがって、データフレームをで分割し、列の各要素からid
最小値を減算して、変換された値を含むベクトル(またはデータフレーム)を返します。私は次のようなものになりたいです:y
y
> dfTrans
id time elapsed
a 1 0
a 2 1
a 3 2
b 4 0
b 5 1
plyrにとっては完璧な作業のようですが、簡単な解決策を見つけることができません。
私が思いつくことができる最高のものは
elapsed <- dlply(df, .(id), function(x) x$time - min(x$time))
elapsed_comb <- NA
for(i in 1:length(names(elapsed))) {
elapsed_comb <- c(elapsed_comb, elapsed[[i]])
}
elapsed_comb <- elapsed_comb[-1]
df$elapsed <- elapsed_comb
これはエレガントではなく、壊れやすいようです。確かにもっと良い方法がありますか?