计算从阶段开始经过的阶段的时间

时间:2015-03-18 16:07:27

标签: r

我有一个数据集,显示每个阶段(ST,A,B,C,D,结束)的时间

数据:

    zz <- "ID  ST   A   B   C   D   End
GX001   0   0   438 0   0   520
GX002   0   182 0   0   198 331
GX003   0   0   0   92  118 118
GX004   0   0   0   0   0   218
GX005   0   24  145 0   151 159
GX006   0   0   0   0   104 111
GX007   0   0   50  0   0   56
GX008   0   0   0   2   23  30
GX009   0   0   483 0   0   507
GX010   0   67  0   0   0   137"

df <- read.table(text=zz,header=T)

结构:

ID     ST   A   B   C   D   End
GX001   0   0   438 0   0   520
GX002   0   182 0   0   198 331
GX003   0   0   0   92  118 118
GX004   0   0   0   0   0   218
GX005   0   24  145 0   151 159
GX006   0   0   0   0   104 111
GX007   0   0   50  0   0   56
GX008   0   0   0   2   23  30
GX009   0   0   483 0   0   507
GX010   0   67  0   0   0   137

我想计算每个阶段观察 的时间。

例如:经过50个单位时间之后,GX007从0 ST转到B阶段。经过56个单位时间之后,GX007B转到End。因此,GX007ST中花费了50个单位的时间,在B中花费了6个单位的时间。

输出:

ID      ST  A   B   C   D   End
GX001   438 0   82  0   0   0
GX002   182 16  0   0   133 0
GX003   92  0   0   26  0   0
GX004   218 0   0   0   0   0
GX005   24  121 6   0   8   0
GX006   104 0   0   0   7   0
GX007   50  0   6   0   0   0
GX008   2   0   0   21  7   0
GX009   483 0   24  0   0   0
GX010   67  70  0   0   0   0

注意:每次观察都从 ST 开始,到 End 结束。许多观察结果都跳过了阶段。

1 个答案:

答案 0 :(得分:1)

这是执行此操作的自定义功能。我假设您的所有条目都大于或等于0 ......

data.frame(df[1],
    t(apply(df[-1], 1, function(r) {
        if (any(r > 0)) r[c(1, which(r>0))] <- c(r[r>0][1], diff(r[r>0]), 0)
        r
    }))
)

#      ID  ST   A  B  C   D End
#1  GX001 438   0 82  0   0   0
#2  GX002 182  16  0  0 133   0
#3  GX003  92   0  0 26   0   0
#4  GX004 218   0  0  0   0   0
#5  GX005  24 121  6  0   8   0
#6  GX006 104   0  0  0   7   0
#7  GX007  50   0  6  0   0   0
#8  GX008   2   0  0 21   7   0
#9  GX009 483   0 24  0   0   0
#10 GX010  67  70  0  0   0   0