![](/img/trans.png)
[英]R (dplyr): count number of “0” observations before “1” in a column by ID
[英]R: count number of observations before and after date
我有一個包含這些列的數據框:一個帶有日期(YYYY-MM-DD),一個帶有年份(YYYY 數字形式),一個帶有個人 ID 和其他具有特征的 ID。
我想過濾掉個人,以便僅保留在日期之前和之后至少有 10 個觀察值(至少 15 個總和)的那些,並且 rest 被過濾掉。 按日期或年份過濾都可以。
你能想出什么方法來做到這一點,它不包括我比較原始數據幀的大量新數據幀 - 以加快進程嗎?
我不得不做類似的事情,並希望找到一些代碼來節省時間......
我沒有找到直接的等價物,所以這是我使用 data.table 的解決方案:
創建一個類似結構的數據表:
ID_seq <- c(5,5,6,8,9,9,9)
dt <- setDT(data.frame(ID = sequence(ID_seq)))
setkey(dt, ID)
dt[, YR := 1:.N, by = .(ID)]
dt$event <- rep(0, nrow(dt))
dt$event[c(4,11,17,25,38,46)] <- 1 # strategically place events
然后就是創建一個滿足條件的列。 我將其設置為事件前后必須至少有 3 年。 建立在那個帖子上:
dt2 <- dt[, counter := seq_len(.N), by = list(ID, cumsum(event == 1L))][, cond := fifelse(sum(counter == 3) > 1, 1, 0), by = ID][cond == 1 ,]
對於發帖人的情況,只需更改第二個語句中的條件即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.