首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中重塑复杂的时间到事件数据

在R中重塑复杂的时间到事件数据
EN

Stack Overflow用户
提问于 2021-04-08 18:22:05
回答 1查看 29关注 0票数 0

我有下面的数据框,其中我有时间的开始,时间的结束和个人获得观察值A或B的日期。

代码语言:javascript
复制
df = 
id Date Start_Date End_Date A B
1  2    1          4        1 0
1  3    1          4        0 1
2  3    2          9        1 0
2  6    2          9        1 0
2  7    2          9        1 0
2  2    2          9        0 1

我想要做的是按时间顺序排列时间(创建一个新的时间变量),并相应地填充信息A和B,也就是说,如果个人在时间2得到A,那么在随后的时间(即3到End_Time)也应该有A。理想情况下,间隔时间不是固定的,但遵循日期的更改(请参阅个人2):

代码语言:javascript
复制
Cool_df = 
id Time A B
1  1    0 0
1  2    1 0
1  3    1 1
1  4    1 1
2  2    0 1
2  3    1 1
2  6    1 1
2  7    1 1
2  9    1 1

任何建议都非常感谢,因为我不知道从哪里开始。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-08 19:17:57

下面是一种data.table方法

代码语言:javascript
复制
library(data.table)
setDT(df)
# Summarise dates
ans <- df[, .(Date = unique(c(min(Start_Date), Date, max(End_Date)))), by = .(id)]
# Join
ans[ df[A==1,], A := 1, on = .(id,Date)]
ans[ df[B==1,], B := 1, on = .(id,Date)]
#fill down NA's using "locf"
cols.to.fill = c("A","B")
ans[, (cols.to.fill) := lapply(.SD, nafill, type = "locf"), 
    by = .(id), .SDcols = cols.to.fill]
#fill other NA with zero
ans[is.na(ans)] <- 0

#    id Date A B
# 1:  1    1 0 0
# 2:  1    2 1 0
# 3:  1    3 1 1
# 4:  1    4 1 1
# 5:  2    2 0 1
# 6:  2    3 1 1
# 7:  2    6 1 1
# 8:  2    7 1 1
# 9:  2    9 1 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67002009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档