1

R,我有三个时间点

时间 <- c(7, 1, 4)

并假设时间段被划分为三个区间:(0, 3], (3, 5], (5, 8]

breaks <- c(3, 5, 8)

timeSpent每个观察有一行,每个时期有一列。它给出了每个时期每个观察所花费的时间:

 timeSpent <- outer(X=time, Y=breaks, FUN=pmin)
 timeSpent <- cbind(timeSpent[, 1], 
                    sapply(X=1:(length(breaks) - 1), FUN=function(ii)
                      timeSpent[, ii + 1] - timeSpent[, ii]))

 > timeSpent
     [,1] [,2] [,3]
[1,]    3    2    2
[2,]    1    0    0
[3,]    3    1    0

例如,观察 1 在间隔 1 中花费了 3 天,在间隔 2 中花费了 2 天,在间隔 3 中又花费了 2 天。对于观察 2,它在间隔 1 中仅花费了 1 天,在其余间隔中没有任何内容。


你有更优雅的获取方式timeSpent吗?

4

1 回答 1

2

这有帮助吗?

我们cbind在矩阵中有一列零,timeSpent因此我们可以获得在第一个观察窗口中花费的初始时间,以及跨行applydiff函数......

res <- t( apply( cbind( 0 , timeSpent ) , 1 , diff ) )
     [,1] [,2] [,3]
[1,]    3    2    2
[2,]    1    0    0
[3,]    3    1    0
于 2013-08-06T09:21:12.083 回答