背景
我有一個資料集d:
d <- data.frame(ID = c("a","a","b","b", "c","c"),
event = c(0,1,0,0,1,1),
event_date = as.Date(c("2011-01-01","2012-08-21","2011-12-23","2011-12-31","2013-03-14","2015-07-12")),
entry_date = as.Date(c("2009-01-01","2009-01-01","2011-09-12","2011-09-12","2005-03-01","2005-03-01")),
stringsAsFactors=FALSE)
它看起來像這樣:

如您所見,其中包含 3 個ID,指示他們是否擁有event、該事件的日期以及他們進入資料集的日期。
問題
我想ID對資料集中的's進行一些抽樣。具體來說,我想對ID滿足以下兩個條件的任何不同的所有行進行采樣:
- 有任何
event=1 - 他們的第一
event_date行(按時間順序最早)的日期與他們的entry_date.
想要的結果
如果您查看 3 中ID的每一個,您會看到只有ID= a滿足這兩個條件:此人event=1在他們的第二個事件記錄中有 ,并且他們的第一個事件記錄的日期在 1 到 3 年之間他們entry_date(2011-01-01 正好是他們進入日期后的兩年)。
所以,我想要一個看起來像這樣的資料框:

我試過的
我已經成功了一半:我已經設法讓代碼滿足我的第一個標準,但不是第二個。看一看:
d_esired <- subset(d, ID %in% sample(unique(ID[event == 1]), 1))
如何添加第二個條件?
uj5u.com熱心網友回復:
使用 data.table 我們可以識別這些 ID,然后子集
library(data.table)
setDT(d)
d[ID %in%
(d[, any(event==1 & any(event_date>(365 entry_date) & event_date<(1095 entry_date))), by=ID][V1==TRUE, ID])]
在any(event_date>(365 entry_date)對任何行有效日期測驗(事件可以是0或1),以及any(event==1 & ...)測驗是否發生以及是否發生在任何點的事件。這用于回傳 ID 值的向量。該%in%運營商然后測驗ID是否在d是該矢量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393463.html
