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 == 0这样的观察d_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 回答