实施例
以下是id = 1
个人的一些数据:
id time status
--------------
1 t status
t
是某个活动的时间,如果事件发生,则status
为1
,如果未发生,则为0
(在这种情况下{{1}是研究的持续时间)。
假设t
位于t
和a2
之间。
我的目标是将我的数据转换为以下内容:
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=1
,a2=3
。
第2部分我也被要求展示我的尝试。这是
a3=7
答案 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