将数据集转换为按时间间隔排成一行

时间:2013-01-15 12:48:23

标签: r format

实施例

以下是id = 1个人的一些数据:

id time status
--------------
1  t    status

t是某个活动的时间,如果事件发生,则status1,如果未发生,则为0(在这种情况下{{1}是研究的持续时间)。

假设t位于ta2之间。

我的目标是将我的数据转换为以下内容:

a3

个人1的总时间分为三个区间,id period start stop status --------------------------- 1 1 0 a1 0 1 2 a1 a2 0 1 3 a2 t status (0, a1)

中没有任何事件

问题

你能想到一种有效的方法来编写一个输入数据集和向量(a1, a2)并输出转换后的数据集的R函数吗?


修改

第1部分 我被问到一个具体的例子。这是一个:

a=(a1, a2, ..., aK)

id time status -------------- 1 5 1 a1=1a2=3

第2部分我也被要求展示我的尝试。这是

a3=7

1 个答案:

答案 0 :(得分:0)

我会把它写成一个适当的可重复的解决方案:

df <- data.frame( id=1, time=5, status=2)
a <- c(1, 3, 7)

res.fn <- function(df, a) {
    id <- rep(1, length(a))
    period <- 1:length(a)
    start <- c(0, a[1:(length(a)-1)])
    stop <- c(a[1:(length(a)-1)], df$time)
    status <- c(rep(0, length(a)-1), df$status)
    data.frame(id, period, start, stop, status)
}
> res.fn(df, a)

  id period start stop status
1  1      1     0    1      0
2  1      2     1    3      0
3  1      3     3    5      2