簡體   English   中英

R:統計日期前后的觀察次數

[英]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 ,]

對於發帖人的情況,只需更改第二個語句中的條件即可。

用 194 個 obs 和 30 個變量標記數據框 用 194 個 obs 和 30 個變量標記數據框

過濾flags數據幀,使用select ,使用dplyr::filter獲得所需的列和str_detect字符串標准:

   df <- select(flags, name) %>% filter(str_detect(flags$name, "^Al"))

print(df)

    name
1 Albania
2 Algeria

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM