1

m時間間隔(t2-t1)の変数の増分を計算する必要があります。これが私のデータフレームのダミーバージョンです:

df <- expand.grid(m = do.breaks(c(1, 10), 5),
                  sample = c("A", "B", "C", "D"))
df$t <- rep(1:6, 4, ordered = TRUE)
df$d_m <- NA

私がやろうとしているのは、との違いを入力することです。df$d_m[i]これは、サンプルの各レベル内で実行する必要があります。ですから、これは私の試みですが、まったく成功していません。df$m[i+1]df$m[i]

delta_m <- function(m, t){
               for(i in 1:length(t)){
               df$d_m[i] <- m[i+1] - m[i]
               }}

df <- ddply(df, .(sample, t), transform, d_m = delta_m(m, t))

私はどこが間違っていますか?

4

1 に答える 1

0

データを次のように分割しますsample

sdf <- split(df, df$sample)

次に、関数を適用しますdiff()(変換内で、のd_m各データフレームコンポーネント内で変更します。の観測が:であるため、sdfがないことに注意してください。t == 0d_mNA

sdf <- lapply(sdf, function(x) transform(x, d_m = c(NA, diff(m))))

最後に、個々のコンポーネントを組み合わせて元に戻します

df <- do.call(rbind, sdf)

その結果

> df
          m sample t d_m
A.A.1   1.0      A 1  NA
A.A.2   2.8      A 2 1.8
A.A.3   4.6      A 3 1.8
A.A.4   6.4      A 4 1.8
A.A.5   8.2      A 5 1.8
A.A.6  10.0      A 6 1.8
B.B.7   1.0      B 1  NA
B.B.8   2.8      B 2 1.8
B.B.9   4.6      B 3 1.8
B.B.10  6.4      B 4 1.8
B.B.11  8.2      B 5 1.8
B.B.12 10.0      B 6 1.8
C.C.13  1.0      C 1  NA
C.C.14  2.8      C 2 1.8
C.C.15  4.6      C 3 1.8
C.C.16  6.4      C 4 1.8
C.C.17  8.2      C 5 1.8
C.C.18 10.0      C 6 1.8
D.D.19  1.0      D 1  NA
D.D.20  2.8      D 2 1.8
D.D.21  4.6      D 3 1.8
D.D.22  6.4      D 4 1.8
D.D.23  8.2      D 5 1.8
D.D.24 10.0      D 6 1.8
于 2012-11-12T17:23:32.780 に答える